Dus eigenlijk moet je filteren. MongoTemplate
biedt veel bewerkingen voor mongodb, als sommige methoden niet bestaan in MongoTemplate, kunnen we gaan met Bson Document
patroon. Probeer in dat geval dit artikel:Trick to covert mongo shell query.
Eigenlijk heb je een Mongo-query nodig, zoiets als het volgende. $addFields
gebruiken een van de onderstaande methoden. Maar je kunt $project
. gebruiken , $set
etc. Hier $addFields
overschrijft uw history_dates
. (Het gebruikt ook om nieuwe velden aan het document toe te voegen).
{
$addFields: {
history_dates: {
$filter: {
input: "$history_dates",
cond: {
$and: [{
$gt: ["$$this", "23/07/2020"]
},
{
$lt: ["$$this", "24/07/2020"]
}
]
}
}
}
}
}
Werkende Mongo-speeltuin.
Deze moet u omzetten in voorjaarsgegevens. Dus @Autowired
de MongoTemplate in je klas.
@Autowired
MongoTemplate mongoTemplate;
De methode is,
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-sjabloon biedt geen toevoegingsmethoden voor $addFields
en $filter
. Dus we gaan gewoon met het bson-documentpatroon. Ik heb dit in het voorjaar niet getest.