Tôi đã thử mongo
của bạn shell và mã MongoDB Spring Java. Mã shell hoạt động tốt, nhưng mã Java tương ứng sử dụng not()
không hoạt động (tôi không biết tại sao).
Đây là một cách khác hoạt động với cùng chức năng mà bạn đang tìm kiếm:
Tôi đang sử dụng các tài liệu đầu vào sau:
{ _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") }
Và, giả sử ngày hôm nay :ISODate("2020-03-24T02:50:04.992Z")
, kết quả sẽ loại trừ tài liệu có _id: 3
, nơi createdOn
trong vòng hôm nay .
mongo
truy vấn shell:
db.collection.find( {
$or: [
{ createdOn: { $gt: ISODate("2020-03-24T23:59:59.99") } },
{ createdOn: { $lt: ISODate("2020-03-24T00:00:00") } }
]
} )
Thao tác này trả về các tài liệu có _id
của 1
và 2
(những điều này không bao gồm ngày hôm nay).
Mã Java tương ứng:
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()));