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

Hvordan man kombinerer ikke-operatører ved hjælp af fjederdata Criteria builder

Jeg prøvede din mongo shell og MongoDB Spring Java-koden. Shell-koden fungerer fint, men den tilsvarende Java-kode bruger not() virker ikke (jeg ved ikke hvorfor).

Her er en anden måde at arbejde med den samme funktionalitet, som du leder efter:

Jeg bruger følgende inputdokumenter:

{ _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") }

Og forudsat dagens dato :ISODate("2020-03-24T02:50:04.992Z") , bør resultatet ekskludere dokumentet med _id: 3 , hvor createdOn er inden for i dag .

mongo shell-forespørgsel:

db.collection.find( {
  $or: [
    { createdOn: { $gt: ISODate("2020-03-24T23:59:59.99") } },
    { createdOn: { $lt: ISODate("2020-03-24T00:00:00") } }
  ]
} )

Dette returnerer dokumenterne med _id s 1 og 2 (disse ekskluderer dagens dato).

Den tilsvarende Java-kode:

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



  1. Seneste rekord efter dato for hver vare mongodb-gruppe

  2. Hvornår skal du indlejre dokumenter i Mongo DB

  3. Sådan integreres Pyramid 1.1 og Mongo DB - så få linjer som muligt

  4. MongoDB GeoJSON Kan ikke udtrække geonøgler fra objekt, misformet geometri? ved indsættelse af type Polygon