Spring Data MongoDB Datum zwischen zwei Daten

bin ich mit Spring-Data für MongoDB und bekam die folgenden Klassen

class A {
    List<B> b;
}

class B {
    Date startDate;
    Date endDate;
}

wenn ich speichern Ein Objekt einer wird es beibehalten, wie

{
    "_id" : "DQDVDE000VFP8E39",
    "b" : [
          {
              "startDate" : ISODate("2009-10-05T22:00:00Z"),
              "endDate" : ISODate("2009-10-29T23:00:00Z")
          },
          {
              "startDate" : ISODate("2009-11-01T23:00:00Z"),
              "endDate" : ISODate("2009-12-30T23:00:00Z")
          }
    ]
}

Nun möchte ich die Abfrage der db für Dokumente, die passenden Einträge in b, bei denen ein bestimmtes Datum zwischen startDate und endDate.

Query query = new Query(Criteria.where("b").elemMatch(
    Criteria.where("startDate").gte(date)
    .and("endDate").lte(date)
);

Die Ergebnisse in der folgenden mongo-Abfrage:

{
   "b": {
       "$elemMatch": { 
           "startDate" : { "$gte" : { "$date" : "2009-11-03T23:00:00.000Z"}}, 
           "endDate" : { "$lte" : { "$date" : "2009-11-03T23:00:00.000Z"}}
       }
   }
}

gibt aber dadurch keine Dokumente. Weiß jemand, was ich falsch mache? Ich verstehe es nicht...

Vielen Dank im Voraus!!

  • Was "margins" tun, dass mongo query? Ist das etwas, das spezifisch für den Java-Treiber? Ich sehe nicht, dass irgendwo in Ihren Daten.
  • Ja, es entspricht nicht der Frühling-Daten-Abfrage, die ist auch falsch. Sollten Sie Abfragen, wo("b"), wo("ein").
  • Im sorry, Jungs, es war spät gestern. Ich entfernte die beiden copy n paste Fehler!
  • Das eine Dokument, das Sie zeigen, nicht die der Anfrage genügen, gibt es andere, die dies tun? Sollte Ihr $gte und $lte Begriffe vertauscht werden.
  • welche version des spring-data-mongodb verwenden Sie?
InformationsquelleAutor sics | 2012-09-06
Schreibe einen Kommentar