Vì vậy, về cơ bản bạn cần phải làm bộ lọc. MongoTemplate
cung cấp rất nhiều thao tác cho mongodb, nếu một số phương thức không tồn tại trong MongoTemplate, chúng ta có thể sử dụng Bson Document
họa tiết. Trong trường hợp đó, hãy thử bài viết này:Thủ thuật truy vấn shell mongo ẩn.
Trên thực tế, bạn cần một truy vấn Mongo như sau. Sử dụng $addFields
một trong những phương pháp được hiển thị bên dưới. Nhưng bạn có thể sử dụng $project
, $set
vv Tại đây $addFields
ghi đè history_dates
của bạn . (Nó cũng sử dụng để thêm các trường mới vào tài liệu).
{
$addFields: {
history_dates: {
$filter: {
input: "$history_dates",
cond: {
$and: [{
$gt: ["$$this", "23/07/2020"]
},
{
$lt: ["$$this", "24/07/2020"]
}
]
}
}
}
}
}
Sân chơi Mongo làm việc.
Bạn cần chuyển đổi dữ liệu này thành dữ liệu mùa xuân. Vì vậy, @Autowired
MongoTemplate trong lớp học của bạn.
@Autowired
MongoTemplate mongoTemplate;
Phương pháp là,
public List<Object> filterDates(){
Aggregation aggregation = Aggregation.newAggregation(
a->new Document("$addFields",
new Document("history_dates",
new Document("$filter",
new Document("input","$history_dates")
.append("cond",
new Document("$and",
Arrays.asList(
new Document("$gt",Arrays.asList("$$this","23/07/2020")),
new Document("$lt",Arrays.asList("$$this","24/07/2020"))
)
)
)
)
)
)
).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());
return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_CLASS.class), Object.class).getMappedResults();
}
Mẫu Mongo không cung cấp các phương thức thêm cho $addFields
và $filter
. Vì vậy, chúng tôi chỉ đi với mẫu tài liệu bson. Tôi chưa thử nghiệm điều này vào mùa xuân.