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