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

Pobierz dokumenty podrzędne, które pasują do maksymalnej wartości w tablicy

Optymalnym najlepszym sposobem na to jest MongoDB 3.2 lub nowszy. Musimy $project nasze dokumenty i korzystaj z $filter operatora, aby zwrócić podzbiór tablicy „topicInfo”, który pasuje do naszego warunku. A od MongoDB3.2 możemy użyć $max w $project etap w cond wyrażenie i wykonać operację logiczną na zwróconej wartości.

Ostatnim etapem potoku jest $match etap, na którym odfiltrowujesz te dokumenty z pustym „topicInfo” za pomocą $exists operator zapytania o element i notacja z kropkami aby uzyskać dostęp do pierwszego elementu w tablicy. Zmniejsza to również ilość danych przesyłanych przez sieć oraz czas i pamięć używaną do dekodowania dokumentów po stronie klienta.

db.collection.aggregate([
    { "$project": { 
        "topicInfo": { 
            "$filter": { 
                "input": "$topicInfo", 
                "as": "t", 
                "cond": { 
                    "$and": [ 
                        { "$eq": [ "$$t.topic", "topic2"] }, 
                        { "$eq": [ "$$t.time", { "$max": "$topicInfo.time" } ] }
                    ] 
                } 
            } 
        } 
    }},
    { "$match": { "topicInfo.0": { "$exists": true } } }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Problemy z użyciem $concat do aktualizacji wartości pola

  2. nie można znaleźć fasoli dla MongoRepository (wiosna rozruchu)

  3. Mapowanie właściwości bez rozróżniania wielkości liter

  4. Czy mogę ubiegać się o forEach w zapytaniu zbiorczym w MongoDB?

  5. mongoDB :Tworzenie identyfikatora obiektu dla każdego nowego dziecka dodanego do pola tablicy