MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Datumsabfrage mit ISODate in Mongodb scheint nicht zu funktionieren

Obwohl $date ist ein Teil von MongoDB Extended JSON und das erhalten Sie standardmäßig mit mongoexport Ich glaube nicht, dass Sie es wirklich als Teil der Abfrage verwenden können.

Versuchen Sie die exakte Suche mit $date wie unten:

db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})

Sie erhalten eine Fehlermeldung:

error: { "$err" : "invalid operator: $date", "code" : 10068 }

Versuchen Sie Folgendes:

db.mycollection.find({
    "dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
})

oder (nach Kommentaren von @user3805045):

db.mycollection.find({
    "dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})

ISODate kann auch erforderlich sein, um Daten ohne Uhrzeit zu vergleichen (angemerkt von @MattMolnar).

Laut Datentypen in der Mongo-Shell sollten beide gleichwertig sein:

Die Mongo-Shell bietet verschiedene Methoden, um das Datum entweder als Zeichenfolge oder als Date-Objekt zurückzugeben:

  • Date()-Methode, die das aktuelle Datum als String zurückgibt.
  • neuer Date()-Konstruktor, der ein Date-Objekt unter Verwendung des ISODate()-Wrappers zurückgibt.
  • ISODate()-Konstruktor, der ein Date-Objekt unter Verwendung des ISODate()-Wrappers zurückgibt.

und mit ISODate sollte immer noch ein Date-Objekt zurückgeben.

{"$date": "ISO-8601 string"} kann verwendet werden, wenn eine strikte JSON-Darstellung erforderlich ist. Ein mögliches Beispiel ist der Hadoop-Connector.