MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Eu preciso recuperar o objeto do MongoDB apenas com o item de array filtrado


Então, basicamente, você precisa fazer o filtro. MongoTemplate oferece muita operação para mongodb, se alguns métodos não existirem no MongoTemplate, podemos usar Bson Document padronizar. Nesse caso, tente este artigo:Truque para a consulta secreta do shell do mongo.

Na verdade, você precisa de uma consulta do Mongo, algo como seguir. Usando $addFields um dos métodos mostrados abaixo. Mas você pode usar $project , $set etc. Aqui $addFields substitui seu history_dates . (Ele usa para adicionar novos campos ao documento também).
{
    $addFields: {
        history_dates: {
            $filter: {
                input: "$history_dates",
                cond: {
                    $and: [{
                            $gt: ["$$this", "23/07/2020"]
                        },
                        {
                            $lt: ["$$this", "24/07/2020"]
                        }
                    ]
                }
            }
        }
    }
}

Parque infantil Mongo de trabalho.

Você precisa converter isso em dados de primavera. Então @Autowired o MongoTemplate em sua classe.
 @Autowired
    MongoTemplate mongoTemplate;

O método é,
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();
}

O modelo Mongo não fornece métodos de adição para $addFields e $filter . Então, vamos apenas com o padrão de documento bson. Eu não testei isso na primavera.