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

Jak filtrovat pole dílčích dokumentů?

Počínaje MongoDB 3.2 můžeme použít $filter operátora k tomu efektivně. V $filter Podmíněný výraz 's musíme použít $setIsSubset operátor pro kontrolu, zda je daná hodnota v poli. Je to hlavně proto, že nemůžeme použít $in operátor dotazu v $project fázi.

db.collection.aggregate([
    { "$project": { 
        "list": { 
            "$filter": { 
                "input": "$list", 
                "as": "lst", 
                "cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
            } 
        } 
    }}
])

Od MongoDB 3.0.x zpětně potřebujete jiný, méně účinný přístup pomocí $map operátor the a $setDifference operátor.

db.collection.aggregate([
    { "$project": { 
        "list": { 
            "$setDifference": [ 
                { "$map": { 
                    "input": "$list", 
                    "as": "lst", 
                    "in": { 
                        "$cond": [
                            { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
                            "$$lst",
                            false
                        ] 
                    } 
                }}, 
                [false] 
            ]
        }
    }}
])


  1. Pochopení WriteConcern v MongoDB C#

  2. Python:vytvoření mezipaměti LRU

  3. Chyba v pojmenování sbírky Mongoose?

  4. jak nakonfigurovat pole debezium odesílaná při aktualizačních událostech (mongo konektor)