Dela via


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). 

Gå vidare