Quindi in pratica devi fare il filtro. MongoTemplate
offre molte operazioni per mongodb, se alcuni metodi non esistono in MongoTemplate, possiamo usare Bson Document
modello. In tal caso, prova questo articolo:Trucco per nascondere la query della shell mongo.
In realtà hai bisogno di una query Mongo qualcosa come seguire. Usando $addFields
uno dei metodi mostrati di seguito. Ma puoi usare $project
, $set
ecc. Qui $addFields
sovrascrive le tue history_dates
. (Utilizza anche per aggiungere nuovi campi al documento).
{
$addFields: {
history_dates: {
$filter: {
input: "$history_dates",
cond: {
$and: [{
$gt: ["$$this", "23/07/2020"]
},
{
$lt: ["$$this", "24/07/2020"]
}
]
}
}
}
}
}
Parco giochi Mongo funzionante.
Devi convertirlo in dati primaverili. Quindi @Autowired
il MongoTemplate nella tua classe.
@Autowired
MongoTemplate mongoTemplate;
Il metodo è,
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();
}
Il modello Mongo non fornisce metodi di aggiunta per $addFields
e $filter
. Quindi andiamo solo con il modello di documento bson. Non l'ho testato in primavera.