Sie müssen in den Ergebnissen grundsätzlich Bedingungen enthalten, um die null
zu akzeptieren. Jetzt fragen Sie "ist größer als" ein geliefertes Datum, und null
ist nicht "größer als", daher ist es ausgeschlossen.
Dies bedeutet eine $or
Bedingung Zugabe zu den beiden möglichen Zustände auf diesem Gebiet zu testen:
Criteria criteria = Criteria.where("onlinedate").lte(date).orOperator(
Criteria.where("offlinedate").gte(date),
Criteria.where("offlinedate").is(null)
);
Query query = new Query().addCriteria(criteria);
System.out.println(query.getQueryObject());
Was würde Ihnen:
{
"onlinedate" : { "$lte" : date } ,
"$or" : [
{ "offlinedate" : { "$gte" : date } } ,
{ "offlinedate" : null }
]
}
, dass die richtige Übersetzung ist der Änderung Ihrer Anfrage zu ermöglichen, Der null
Wert, aber es macht mich denken, dass Ihr Grundgedanken auf die Abfrage falsch ist, da dies Ergebnisse zurückgeben würde, die im Grunde sagen "noch online". Das mag sein, was du willst, aber dann hast du vielleicht etwas anderes gefragt. Wenn
in der Tat haben Sie gesucht „all“ Dokument, das tat nicht haben die mitgelieferte date
Wert „betweeen“ die beiden Werte in dem Dokument, dann würden Sie stattdessen „invertieren“ den Bereich Ausdrücke Dokumente anzupassen „zwischen „und dann‚invertieren‘das Ergebnis mit $nor
statt:
Criteria criteria = new Criteria().norOperator(
Criteria.where("onlinedate").gte(date)
.and("offlinedate").lte(date)
);
Query query = new Query().addCriteria(criteria);
System.out.println(query.getQueryObject());
, die in einer Abfrage wie folgt ergibt:
{
"$nor" : [
{
"onlinedate" : { "$gte" : date },
"offlinedate" : { "$lte" : date }
}
]
}
Welche ist Ergebnisse liefern sowohl“ vor dem e "und" nach "der Bereich zwischen den beiden Datumseigenschaften, oder wo das "offline"
Datum war null
und der Bereich ist nicht" geschlossen ".
Es davon abhängt, welche Satz von Ergebnissen Sie eigentlich wollen, entweder sein, dass Sie die null
Werte umfassen die Daten zu finden, die „noch offen“ ist, oder Sie „ausschließen den Bereich“, um nur die Daten zu finden, die sich außerhalb des fallen Bereich stattdessen.