sql >> Databáze >  >> NoSQL >> MongoDB

Načtěte dílčí dokumenty, které odpovídají maximální hodnotě v poli

Optimální nejlepší způsob, jak toho dosáhnout, je v MongoDB 3.2 nebo novějším. Potřebujeme $project naše dokumenty a použijte $filter operátor vrátí podmnožinu pole "topicInfo", která odpovídá naší podmínce. A od MongoDB3.2 můžeme použít $max v $project fázi v cond ition a provést logickou operaci s vrácenou hodnotou.

Poslední fází v procesu je $match fázi, kdy odfiltrujete tyto dokumenty s prázdným „topicInfo“ pomocí $exists operátor dotazu na prvek a tečkový zápis pro přístup k prvnímu prvku v poli. To také snižuje jak množství dat odesílaných po drátě, tak čas a paměť použitou k dekódování dokumentů na straně 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. Seřadit vnořené pole objektů

  2. jak provést dotaz pouze pro čtení na sdílené replikě nastavené v mongodb

  3. Jak získat velikost jednoho dokumentu v Mongodb?

  4. Upsert Array Elements vyhovující kritériím v dokumentu MongoDB?