Ho provato il tuo mongo
shell e il codice MongoDB Spring Java. Il codice della shell funziona bene, ma il codice Java corrispondente utilizza not()
non funziona (non so perché).
Ecco un altro modo per lavorare con la stessa funzionalità che stai cercando:
Sto usando i seguenti documenti di input:
{ _id: 1, createdOn: ISODate("2020-03-21T12:05:00") },
{ _id: 2, createdOn: ISODate("2020-03-28T18:33:00") },
{ _id: 3, createdOn: ISODate("2020-03-24T01:56:00") }
E, assumendo la data odierna :ISODate("2020-03-24T02:50:04.992Z")
, il risultato dovrebbe escludere il documento con _id: 3
, dove createdOn
è entro oggi .
Il mongo
query shell:
db.collection.find( {
$or: [
{ createdOn: { $gt: ISODate("2020-03-24T23:59:59.99") } },
{ createdOn: { $lt: ISODate("2020-03-24T00:00:00") } }
]
} )
Questo restituisce i documenti con _id
è 1
e 2
(questi escludono la data odierna).
Il codice Java corrispondente:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd H:m:s");
Date fromDate = dateFormat.parse("2020-03-24 00:00:00");
Date toDate = dateFormat.parse("2020-03-24 23:59:59");
Criteria c = new Criteria().orOperator(
Criteria.where("createdOn").lt(fromDate),
Criteria.where("createdOn").gt(toDate) );
Query q = Query.query(c);
MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "testDB");
List<Document> result = mongoOps.find(q, Document.class, "collection");
result.forEach(doc -> System.out.println(doc.toJson()));