sql >> Database teknologi >  >> NoSQL >> MongoDB

Datoforespørgsel med ISODate i mongodb ser ikke ud til at virke

Selvom $date er en del af MongoDB Extended JSON, og det er det, du får som standard med mongoexport Jeg tror ikke, du rigtig kan bruge det som en del af forespørgslen.

Hvis prøv eksakt søgning med $date som nedenfor:

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

du får fejlmeddelelsen:

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

Prøv dette:

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

eller (efter kommentarer af @user3805045):

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

ISODate kan også være nødvendigt at sammenligne datoer uden tid (noteret af @MattMolnar).

Ifølge datatyper i mongoen skal Shell begge være ækvivalente:

Mongo-skallen giver forskellige metoder til at returnere datoen, enten som en streng eller som et Dato-objekt:

  • Date() metode, som returnerer den aktuelle dato som en streng.
  • ny Date()-konstruktør, som returnerer et Date-objekt ved hjælp af ISODate()-indpakningen.
  • ISODate()-konstruktør, som returnerer et Date-objekt ved hjælp af ISODate()-indpakningen.

og ved at bruge ISODate skal stadig returnere et Dato-objekt.

{"$date": "ISO-8601 string"} kan bruges, når streng JSON-repræsentation er påkrævet. Et muligt eksempel er Hadoop-stik.



  1. Redis autofuldførelse

  2. Kan MongoDB aggregeringsramme $group returnere en række værdier?

  3. Det er ikke muligt at låse et mongodb-dokument. Hvad hvis jeg har brug for det?

  4. Ret "indeksnavn skal være en streng", når du dropper flere indekser i MongoDB