Ta bort data med Azure Cosmos DB:s API för MongoDB
GÄLLER FÖR: MongoDB
Med time to live (TTL)-funktionen kan databasen automatiskt låta data gå ut. Azure Cosmos DB:s API för MongoDB använder Azure Cosmos DB:s grundläggande TTL-funktioner. Två lägen stöds: ange ett TTL-värde på hela samlingen och ange enskilda TTL-värden för varje dokument. Logiken som styr TTL-index och TTL-värden per dokument i Azure Cosmos DB:s API för MongoDB är densamma som i Azure Cosmos DB.
TTL-index
Om du vill aktivera förfallodatum för dokumenten i en viss samling måste du skapa ett TTL-index (Time to Live). TTL-indexet är ett index i fältet _ts
med värdet "expireAfterSeconds".
MongoShell-exempel:
globaldb:PRIMARY> db.coll.createIndex({"_ts":1}, {expireAfterSeconds: 10})
Kommandot i exemplet ovan skapar ett index med TTL-funktioner.
Kommandots utdata innehåller olika metadata:
{
"_t" : "CreateIndexesResponse",
"ok" : 1,
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 4
}
När indexet har skapats tar databasen automatiskt bort alla dokument i samlingen som inte har ändrats under de senaste 10 sekunderna.
Kommentar
_ts
är ett Azure Cosmos DB-specifikt fält och är inte tillgängligt från MongoDB-klienter. Det är en reserverad (system)egenskap som innehåller tidsstämpeln för senaste ändringen av dokumentet.
Java-exempel:
MongoCollection collection = mongoDB.getCollection("collectionName");
String index = collection.createIndex(Indexes.ascending("_ts"),
new IndexOptions().expireAfter(10L, TimeUnit.SECONDS));
C#-exempel:
var options = new CreateIndexOptions {ExpireAfter = TimeSpan.FromSeconds(10)};
var field = new StringFieldDefinition<BsonDocument>("_ts");
var indexDefinition = new IndexKeysDefinitionBuilder<BsonDocument>().Ascending(field);
await collection.Indexes.CreateOneAsync(indexDefinition, options);
Ange TTL-värde för ett dokument
TTL-värden per dokument stöds också. Dokumenten måste innehålla en rotnivåegenskap ”ttl” (gemener) och ett TTL-index enligt beskrivningen ovan måste ha skapats för samlingen. TTL-värden som anges i ett dokument åsidosätter samlingens TTL-värde.
TTL-värdet måste vara ett int32. Du kan också använda ett int64 som passar i int32 eller dubbelt med någon decimaldel som passar i int32. Värden för TTL-egenskapen som inte överensstämmer med dessa specifikationer tillåts men behandlas inte som ett beskrivande TTL-värde för dokument.
TTL-värdet för dokumentet är valfritt. Dokument utan ett TTL-värde kan infogas i samlingen. I det här fallet respekteras samlingens TTL-värde.
Följande dokument har giltiga TTL-värden. När dokumenten är infogat används dokumentets TTL-värden istället för samlingens TTL-värden. Därför tas dokumenten bort efter 20 sekunder.
globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: 20.0})
globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: NumberInt(20)})
globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: NumberLong(20)})
Följande dokument har ogiltiga TTL-värden. Dokumenten infogas, men dokumentets TTL-värde kommer inte att respekteras. Därför tas dokumenten bort efter 10 sekunder på grund av samlingens TTL-värde.
globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: 20.5}) //TTL value contains non-zero decimal part.
globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: NumberLong(2147483649)}) //TTL value is greater than Int32.MaxValue (2,147,483,648).