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

Najděte dokumenty s poli, které obsahují dokument s určitým polem

Pomocí $where operátor.

db.collection.find(function() { 
    return this.docs.length === this.docs.filter(function(doc) {
        return typeof(doc.foo) !== "undefined" && doc.foo !== null ;}).length 
})

Dalším způsobem, jak toho dosáhnout, je spustit dva dotazy:Jeden pro načtení _id ze všech dokumentů, které neodpovídají vašim kritériím pomocí distinct() metoda:

var unwantedIds = db.collection.distinct( "_id", { "docs": { "$elemMatch": { "foo": { "$exists": false } } } } );

Poté použijte $nin operátora vrátit všechny dokumenty, které odpovídají vašim kritériím.

db.collection.find({ "_id": { "$nin": unwantedIds } } )

Můžete také použít .aggregate() metoda, ale funguje to pouze v případě, že máte verzi 3.2 nebo novější, protože musíte použít $filter

První fází v procesu je $match fázi, kdy odfiltrujete ty dokumenty, kde pole "foo" chybí. Tím se sníží celkový počet dokumentů, které budou zpracovány. Další a poslední fází je $redact etapa. V této fázi musíte použít $size operátor, který vrátí velikost pole "docs" a velikost pole dílčích dokumentů, kde je přítomen "foo", a vrátí všechny dokumenty, kde jsou dvě hodnoty stejné.

db.collection.aggregate([
    { "$match": { "docs.foo": { "$exists": true } } }, 
    { "$redact": { 
        "$cond": [ 
            { "$eq": [ 
                { "$size": "$docs" }, 
                { "$size":  { 
                    "$filter": { 
                        "input": "$docs", 
                        "as": "doc", 
                        "cond": { 
                            "$ne": [ 
                                { "$ifNull": [ "$$doc.foo", null ] },
                                null 
                            ] 
                        } 
                    }
                }}
            ]}, 
            "$$KEEP", 
            "$$PRUNE"
        ]
    }}
])



  1. Chyba ověření při přístupu k mongodb prostřednictvím aplikace Spring Boot

  2. Manipulace s vlastní BSON Marshaling

  3. Formát data ve výstupu dotazu mongodb na shell

  4. Jak zprůměrovat sečtené hodnoty v mongodb?