sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man hittar senaste uppdatering/infoga/ta bort operationstid på mongodb-samling utan objektid-fält

För att göra en lång historia kort:MongoDB har en flexibel schema. Lägg bara till ett datumfält. Eftersom äldre poster inte har det, kan de inte vara den sista posten.

Låt oss kalla det fältet mtime .

Så efter att ha lagt till ett datumfält i din schemadefinition genererar vi ett index i fallande ordning på det nya fältet:

db.yourCollction.createIndex({mtime:-1})

Det är enkelt att hitta den sista tiden för en samling nu:

db.yourCollection.find({"mtime":{"$exists":true}}).sort({"mtime":-1}).limit(1)

Gör detta för varje samling. När ovanstående fråga inte returnerar ett värde inom den tidsram som du definierade för att rensa en samling, släpp det helt enkelt, eftersom det inte har ändrats sedan du introducerade mtime-fältet.

När dina samlingar har städats kan du ta bort mtime fältet från din schemadefinition. För att ta bort det från dokumenten kan du köra en enkel fråga:

db.yourCollection.update(
  { "mtime":{ $exists:true} },
  { "$unset":{ "mtime":""} },
  { multi: true}
)


  1. Lista det sista meddelandet i varje konversation, som involverar en användare, i MongoDB

  2. Är det möjligt att definiera nyckeln när man infogar i mongodb

  3. mongodb-aggregation med $project för att villkorligt utesluta ett fält

  4. ScaleGrid tillkännager Shared MongoDB Hosting på Amazon AWS