Så dybest set skal du lave filter. MongoTemplate
tilbyder en masse betjening for mongodb, hvis nogle metoder ikke findes i MongoTemplate, kan vi gå med Bson Document
mønster. I så fald kan du prøve denne artikel:Trick to covert mongo shell query.
Faktisk har du brug for en Mongo-forespørgsel, noget som at følge. Brug af $addFields
en af metoderne vist nedenfor. Men du kan bruge $project
, $set
osv. Her $addFields
overskriver dine history_dates
. (Det bruges også til at tilføje nye felter til dokumentet).
{
$addFields: {
history_dates: {
$filter: {
input: "$history_dates",
cond: {
$and: [{
$gt: ["$$this", "23/07/2020"]
},
{
$lt: ["$$this", "24/07/2020"]
}
]
}
}
}
}
}
Arbejder Mongo legeplads.
Du skal konvertere dette til forårsdata. Så @Autowired
MongoTemplate i din klasse.
@Autowired
MongoTemplate mongoTemplate;
Metoden er,
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-skabelonen giver ikke tilføjelsesmetoder til $addFields
og $filter
. Så vi går bare med bson dokumentmønster. Jeg har ikke testet dette i foråret.