MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come combinare non operatori utilizzando il generatore di criteri di dati di primavera

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