MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Muszę pobrać obiekt MongoDB tylko za pomocą filtrowanego elementu tablicy

Więc w zasadzie musisz zrobić filtr. MongoTemplate oferuje wiele operacji dla mongodb, jeśli niektóre metody nie istnieją w MongoTemplate, możemy skorzystać z Document Bson wzór. W takim przypadku spróbuj tego artykułu:Sztuczka, aby ukryć zapytanie powłoki mongo.

Właściwie potrzebujesz zapytania Mongo podobnego do następującego. Korzystanie z $addFields jedną z poniższych metod. Ale możesz użyć $project , $set itp. Tutaj $addFields nadpisuje twoje history_dates . (Służy również do dodawania nowych pól do dokumentu).

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

Działający plac zabaw Mongo.

Musisz to przekonwertować na dane wiosenne. Więc @Autowired MongoTemplate w twojej klasie.

 @Autowired
    MongoTemplate mongoTemplate;

Metoda jest taka,

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

Szablon Mongo nie zapewnia metod dodawania dla $addFields i $filter . Więc po prostu idziemy ze wzorem dokumentu bson. Nie testowałem tego wiosną.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można połączyć się z serwerem 127.0.0.1:27017

  2. W jaki sposób MongoDB unika bałaganu związanego z iniekcją SQL?

  3. MongoDb — Zmień typ z Int na Double

  4. Filtry tablicy Mongodb 3.6.0-rc3 nie działają?

  5. Grupuj według sumy mongodb