sql >> Database >  >> NoSQL >> MongoDB

Datumquery met ISODate in mongodb lijkt niet te werken

Hoewel $date is een onderdeel van MongoDB Extended JSON en dat krijg je standaard met mongoexport Ik denk niet dat je het echt kunt gebruiken als onderdeel van de query.

Als u exact zoekt met $date zoals hieronder:

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

je krijgt een foutmelding:

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

Probeer dit:

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

of (na opmerkingen van @user3805045):

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

ISODate kan ook nodig zijn om datums zonder tijd te vergelijken (opgemerkt door @MattMolnar).

Volgens gegevenstypen in de mongo Shell zouden beide equivalent moeten zijn:

De mongo-shell biedt verschillende methoden om de datum te retourneren, hetzij als een string of als een Date-object:

  • Date() methode die de huidige datum als een string teruggeeft.
  • nieuwe Date()-constructor die een Date-object retourneert met behulp van de ISODate()-wrapper.
  • ISODate()-constructor die een Date-object retourneert met behulp van de ISODate()-wrapper.

en gebruik ISODate moet nog steeds een Date-object retourneren.

{"$date": "ISO-8601 string"} kan worden gebruikt wanneer strikte JSON-representatie vereist is. Een mogelijk voorbeeld is de Hadoop-connector.



  1. Staat Redis alleen tekenreeksweergave toe, maar geen numerieke waarde?

  2. Docker-compose , toch om een ​​redis.conf-bestand op te geven?

  3. MongoDB $in Query-operator

  4. Voeg item toe aan MongoDB-documentarray in PyMongo zonder opnieuw in te voegen