J'ai essayé votre mongo
shell et le code Java de MongoDB Spring. Le code shell fonctionne bien, mais le code Java correspondant utilisant le not()
ne fonctionne pas (je ne sais pas pourquoi).
Voici une autre façon de travailler avec la même fonctionnalité que vous recherchez :
J'utilise les documents d'entrée suivants :
{ _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") }
Et, en supposant la date d'aujourd'hui :ISODate("2020-03-24T02:50:04.992Z")
, le résultat doit exclure le document avec _id: 3
, où le createdOn
est dans aujourd'hui .
Le mongo
requête shell :
db.collection.find( {
$or: [
{ createdOn: { $gt: ISODate("2020-03-24T23:59:59.99") } },
{ createdOn: { $lt: ISODate("2020-03-24T00:00:00") } }
]
} )
Cela renvoie les documents avec _id
est 1
et 2
(ceux-ci excluent la date d'aujourd'hui).
Le code Java correspondant :
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()));