sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo combinar operadores no utilizando el generador de criterios de datos de primavera

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()));