Donc, fondamentalement, vous devez faire un filtre. MongoTemplate
offre beaucoup d'opérations pour mongodb, si certaines méthodes n'existent pas dans MongoTemplate, nous pouvons utiliser Bson Document
modèle. Dans ce cas, essayez cet article :Astuce pour dissimuler une requête mongo shell.
En fait, vous avez besoin d'une requête Mongo comme suit. Utilisation de $addFields
l'une des méthodes présentées ci-dessous. Mais vous pouvez utiliser $project
, $set
etc. Ici $addFields
écrase vos history_dates
. (Il sert également à ajouter de nouveaux champs au document).
{
$addFields: {
history_dates: {
$filter: {
input: "$history_dates",
cond: {
$and: [{
$gt: ["$$this", "23/07/2020"]
},
{
$lt: ["$$this", "24/07/2020"]
}
]
}
}
}
}
}
Aire de jeux Mongo fonctionnelle.
Vous devez convertir cela en données de printemps. Donc @Autowired
le MongoTemplate dans votre classe.
@Autowired
MongoTemplate mongoTemplate;
La méthode est,
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();
}
Le modèle Mongo ne fournit pas de méthodes d'ajout pour $addFields
et $filter
. Donc, nous allons simplement avec le modèle de document bson. Je n'ai pas testé cela au printemps.