ObjectId
s finns för situationer där du inte har en unik nyckel för varje dokument i en samling. De är unika, så du behöver inte oroa dig för konflikter och de skärs ganska bra i stora installationer utan alltför mycket oro (de har för- och nackdelar, läs mer här
).
ObjectId
innehåller också tidsstämpeln för klienten där ObjectId
genererades (såvida inte DB-servern är konfigurerad att generera alla nycklar). Med det, som du märkte, kan du använda tidsstämpeln för att utföra vissa datumoperationer. Men om du planerar att använda Aggregation Framework kommer du att upptäcka att du inte kan använda ett ObjectId
i alla datumoperationer för närvarande (problem
). Om du vill använda AF, behöver du ett andra fält som innehåller datumet, tyvärr lagras det dubbelt med ObjectId
s interna värde.
Om du kan vara säker på att _id
du genererar är unik, så finns det inte mycket anledning att använda ett ObjectId
i din datastruktur.