sql >> Database >  >> NoSQL >> MongoDB

Ik moet het object van MongoDB alleen ophalen met het array-item van filtered

Dus eigenlijk moet je filteren. MongoTemplate biedt veel bewerkingen voor mongodb, als sommige methoden niet bestaan ​​in MongoTemplate, kunnen we gaan met Bson Document patroon. Probeer in dat geval dit artikel:Trick to covert mongo shell query.

Eigenlijk heb je een Mongo-query nodig, zoiets als het volgende. $addFields gebruiken een van de onderstaande methoden. Maar je kunt $project . gebruiken , $set etc. Hier $addFields overschrijft uw history_dates . (Het gebruikt ook om nieuwe velden aan het document toe te voegen).

{
    $addFields: {
        history_dates: {
            $filter: {
                input: "$history_dates",
                cond: {
                    $and: [{
                            $gt: ["$$this", "23/07/2020"]
                        },
                        {
                            $lt: ["$$this", "24/07/2020"]
                        }
                    ]
                }
            }
        }
    }
}

Werkende Mongo-speeltuin.

Deze moet u omzetten in voorjaarsgegevens. Dus @Autowired de MongoTemplate in je klas.

 @Autowired
    MongoTemplate mongoTemplate;

De methode is,

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();
}

Mongo-sjabloon biedt geen toevoegingsmethoden voor $addFields en $filter . Dus we gaan gewoon met het bson-documentpatroon. Ik heb dit in het voorjaar niet getest.




  1. Hoe geneste $ lookup zoeken in MongoDB?

  2. Redis - Lua-tabellen als retourwaarden - waarom werkt dit niet?

  3. Is dit een geldig gebruik van ServiceStack Redis?

  4. Absolute waarde met MongoDB-aggregatieframework