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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du wissen willst, Google docs, wo
date
ist zwischen denstartDate
undendDate
einerb
array-element, dann müssen Sie umkehren, Ihregte
undlte
Aufrufe:startDate
undendDate
Felder? Mein Verständnis ist, dass, wenn die Indizierung, die "range" - Feld positioniert sich als Letzte in der compound-index. Beispiel: "Finde alle Männer mit einem Alter zwischen 50 und 75". Mitgender
undage
Felder, Sie würde einen zusammengesetzten index aufgender-age
. (cookbook.mongodb.org/patterns/date_range )