MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да филтрирам масив от поддокументи?

Започвайки от MongoDB 3.2, можем да използваме $filter операторът да се справи ефективно с това. В $filter условен израз на трябва да използваме $setIsSubset оператор за проверка дали дадена стойност е в масива. Това е главно защото не можем да използваме $in оператор на заявка в $project етап.

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

От MongoDB 3.0.x назад се нуждаете от различен, по-малко ефективен подход, като използвате $map оператор the и $setDifference оператор.

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Мангуста - причинена от ::11000 E11000 дублиран ключов индекс на грешка?

  2. как да използвам mapreduce в поддокумент на заявка mongoose/mongodb?

  3. Схемата не е регистрирана за модел. Mongodb>Mongoose

  4. Как да проверите дали MongoDB връзката е жива в Node.js

  5. Извеждане на основен HTML изглед?