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?

War es hilfreich?

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 _idwerden sie entweder im „Treiber“ oder explizit vom Benutzer erstellt, oder wenn sie immer noch weggelassen werden, generiert der Server einen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top