Im Grunde müssen Sie also filtern. MongoTemplate
bietet viel Betrieb für mongodb, wenn einige Methoden in MongoTemplate nicht vorhanden sind, können wir mit Bson Document
gehen Muster. Probieren Sie in diesem Fall diesen Artikel aus:Trick zur verdeckten Mongo-Shell-Abfrage.
Eigentlich brauchen Sie eine Mongo-Abfrage wie die folgende. Verwendung von $addFields
eine der unten gezeigten Methoden. Aber Sie können $project
verwenden , $set
usw. Hier $addFields
überschreibt Ihre history_dates
. (Es wird auch verwendet, um dem Dokument neue Felder hinzuzufügen).
{
$addFields: {
history_dates: {
$filter: {
input: "$history_dates",
cond: {
$and: [{
$gt: ["$$this", "23/07/2020"]
},
{
$lt: ["$$this", "24/07/2020"]
}
]
}
}
}
}
}
Funktionierender Mongo-Spielplatz.
Sie müssen dies in Federdaten umwandeln. Also @Autowired
das MongoTemplate in Ihrer Klasse.
@Autowired
MongoTemplate mongoTemplate;
Die Methode ist,
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();
}
Die Mongo-Vorlage bietet keine Add-Methoden für $addFields
und $filter
. Also gehen wir einfach mit bson document pattern. Ich habe das im Frühjahr nicht getestet.