sql >> Database teknologi >  >> NoSQL >> MongoDB

Jeg skal hente MongoDB's objekt bare med filtered's array element

Så dybest set skal du lave filter. MongoTemplate tilbyder en masse betjening for mongodb, hvis nogle metoder ikke findes i MongoTemplate, kan vi gå med Bson Document mønster. I så fald kan du prøve denne artikel:Trick to covert mongo shell query.

Faktisk har du brug for en Mongo-forespørgsel, noget som at følge. Brug af $addFields en af ​​metoderne vist nedenfor. Men du kan bruge $project , $set osv. Her $addFields overskriver dine history_dates . (Det bruges også til at tilføje nye felter til dokumentet).

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

Arbejder Mongo legeplads.

Du skal konvertere dette til forårsdata. Så @Autowired MongoTemplate i din klasse.

 @Autowired
    MongoTemplate mongoTemplate;

Metoden er,

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-skabelonen giver ikke tilføjelsesmetoder til $addFields og $filter . Så vi går bare med bson dokumentmønster. Jeg har ikke testet dette i foråret.




  1. Transaktioner og uropgørelse i Redis

  2. En oversigt over WiredTiger Storage Engine til MongoDB

  3. Redis indstilling af TTL på hSet Keys

  4. Online Apache HBase Backups med CopyTable