sql >> Database >  >> NoSQL >> MongoDB

Hoe niet-operators te combineren met behulp van de lentegegevens Criteria-builder

Ik heb je mongo geprobeerd shell en de MongoDB Spring Java-code. De shell-code werkt prima, maar de bijbehorende Java-code gebruikt de not() werkt niet (ik weet niet waarom).

Hier is een andere manier om te werken met dezelfde functionaliteit die u zoekt:

Ik gebruik de volgende invoerdocumenten:

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

En, ervan uitgaande dat de datum van vandaag :ISODate("2020-03-24T02:50:04.992Z") , het resultaat zou het document met _id: 3 . moeten uitsluiten , waarbij de createdOn is binnen vandaag .

De mongo shell-query:

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

Dit retourneert de documenten met _id 's 1 en 2 (deze zijn exclusief de datum van vandaag).

De bijbehorende Java-code:

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. Hoe het vorige mongoDB-document uit een samengestelde index te halen

  2. Hoe MongoError op te lossen:pool vernietigd tijdens verbinding met CosmosDB

  3. Zijn Redis-updates synchroon?

  4. Redis zrevrangebyscore, sorteren anders dan lexicografische volgorde