Saya mencoba mongo Anda shell dan kode Java MongoDB Spring. Kode shell berfungsi dengan baik, tetapi kode Java yang sesuai menggunakan not() tidak berfungsi (saya tidak tahu mengapa).
Berikut adalah cara lain untuk bekerja dengan fungsi yang sama yang Anda cari:
Saya menggunakan dokumen masukan berikut:
{ _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") }
Dan, dengan asumsi tanggal hari ini :ISODate("2020-03-24T02:50:04.992Z") , hasilnya harus mengecualikan dokumen dengan _id: 3 , di mana createdOn ada dalam hari ini .
mongo permintaan shell:
db.collection.find( {
$or: [
{ createdOn: { $gt: ISODate("2020-03-24T23:59:59.99") } },
{ createdOn: { $lt: ISODate("2020-03-24T00:00:00") } }
]
} )
Ini mengembalikan dokumen dengan _id 1 dan 2 (ini tidak termasuk tanggal hari ini).
Kode Java yang sesuai:
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()));