Entonces, básicamente, necesitas hacer un filtro. MongoTemplate
ofrece muchas operaciones para mongodb, si algunos métodos no existen en MongoTemplate, podemos ir con Bson Document
patrón. En ese caso, prueba este artículo:Truco para encubrir la consulta de mongo shell.
En realidad, necesita una consulta de Mongo algo como lo siguiente. Usando $addFields
uno de los métodos que se muestran a continuación. Pero puedes usar $project
, $set
etc. Aquí $addFields
sobrescribe su history_dates
. (También se usa para agregar nuevos campos al documento).
{
$addFields: {
history_dates: {
$filter: {
input: "$history_dates",
cond: {
$and: [{
$gt: ["$$this", "23/07/2020"]
},
{
$lt: ["$$this", "24/07/2020"]
}
]
}
}
}
}
}
Zona de juegos de trabajo de Mongo.
Necesita convertir esto en datos de primavera. Así que @Autowired
MongoTemplate en tu clase.
@Autowired
MongoTemplate mongoTemplate;
El método es,
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();
}
La plantilla de Mongo no proporciona métodos de adición para $addFields
y $filter
. Así que vamos con el patrón de documento bson. No he probado esto en Spring.