MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Трябва да извлека обекта на MongoDB само с елемент от масива на filtered

Така че основно трябва да направите филтър. MongoTemplate предлага много операции за mongodb, ако някои методи не съществуват в MongoTemplate, можем да отидем с Bson Document модел. В такъв случай опитайте тази статия:Трик за скрита заявка за mongo shell.

Всъщност имате нужда от заявка за Mongo, нещо като следното. Използване на $addFields един от методите, показани по-долу. Но можете да използвате $project , $set и т.н. Тук $addFields презаписва вашите history_dates . (Използва и за добавяне на нови полета към документа).

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

Работеща детска площадка Mongo.

Трябва да преобразувате това в пролетни данни. Така че @Autowired MongoTemplate във вашия клас.

 @Autowired
    MongoTemplate mongoTemplate;

Методът е,

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 не предоставя методи за добавяне за $addFields и $filter . Така че ние просто вървим с модел на документ bson. Не съм тествал това през пролетта.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Вмъкване на данни във вложен масив в mongodb

  2. Четенето на DBname.system.indexes се провали в клъстера Atlas от mongobee след свързване

  3. Монго агрегиране с разредени на страници данни и суми

  4. MongoDB® с Hadoop и свързаните с тях технологии за големи данни

  5. MongoDB $min Оператор на конвейер за агрегиране