Vergleichsabfrageoperator ObjectId <-> Datum
-
20-12-2019 - |
Frage
Ist es möglich, Vergleichsabfragen durchzuführen? $gt
, $lt
, usw.von einem Date
gegen einen ObjectId
und umgekehrt?Konvertiert der Mongodb-Treiber dies automatisch?Überträgt dieser Mongodb-Server dies automatisch?
Lösung
Ja und nein.
Bei den JavaScript-basierten Methoden ist es möglich, aus dem ObjectId-Wert ein Datum abzurufen, das Sie für Vergleiche verwenden können.Es sollte auch möglich sein, eine ObjectId mit einem bestimmten Datumswert zu erstellen, ohne jedoch den Nutzen davon zu erkennen.Aber alle sind gültig und im Wesentlichen nach Datum:
ObjectId("53473d87cb495e216c982929") > ObjectId("53473e57cb495e216c98292a")
ObjectId("53473d87cb495e216c982929").getTimestamp() >
ObjectId("53473e57cb495e216c98292a").getTimestamp()
ObjectId("53473d87cb495e216c982929").getTimestamp() >
ISODate("2014-04-11T00:55:35Z")
Formen wie diese werden also funktionieren, auch wenn sie wirklich keine so tolle Aussage sind:
db.collection.find({
"$where": function() {
return this._id.getTimestamp() > new Date("2014-01-01");
}
}
Was die „Erschaffung“ von angeht _id
werden sie entweder im „Treiber“ oder explizit vom Benutzer erstellt, oder wenn sie immer noch weggelassen werden, generiert der Server einen.