Probé tu mongo
shell y el código Spring Java de MongoDB. El código de shell funciona bien, pero el código Java correspondiente usando not()
no funciona (no sé por qué).
Aquí hay otra forma de trabajar con la misma funcionalidad que busca:
Estoy usando los siguientes documentos de entrada:
{ _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") }
Y, asumiendo la fecha de hoy :ISODate("2020-03-24T02:50:04.992Z")
, el resultado debería excluir el documento con _id: 3
, donde createdOn
está dentro de hoy .
El mongo
consulta de shell:
db.collection.find( {
$or: [
{ createdOn: { $gt: ISODate("2020-03-24T23:59:59.99") } },
{ createdOn: { $lt: ISODate("2020-03-24T00:00:00") } }
]
} )
Esto devuelve los documentos con _id
1
de y 2
(estos excluyen la fecha de hoy).
El código Java correspondiente:
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()));