Така че основно трябва да направите филтър. MongoTemplate
предлага много операции за mongodb, ако някои методи не съществуват в MongoTemplate, можем да отидем с Bson Document
модел. В такъв случай опитайте тази статия:Трик за скрита заявка за mongo shell.
Всъщност имате нужда от заявка за Mongo, нещо като следното. Използване на $addFields
един от методите, показани по-долу. Но можете да използвате $project
, $set
и т.н. Тук $addFields
презаписва вашите history_dates
. (Използва и за добавяне на нови полета към документа).
{
$addFields: {
history_dates: {
$filter: {
input: "$history_dates",
cond: {
$and: [{
$gt: ["$$this", "23/07/2020"]
},
{
$lt: ["$$this", "24/07/2020"]
}
]
}
}
}
}
}
Работеща детска площадка Mongo.
Трябва да преобразувате това в пролетни данни. Така че @Autowired
MongoTemplate във вашия клас.
@Autowired
MongoTemplate mongoTemplate;
Методът е,
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();
}
Шаблонът Mongo не предоставя методи за добавяне за $addFields
и $filter
. Така че ние просто вървим с модел на документ bson. Не съм тествал това през пролетта.