MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara memfilter array sub-dokumen?

Mulai dari MongoDB 3.2, kita dapat menggunakan $filter operator untuk efisien untuk ini. Di $filter ekspresi kondisional kita perlu menggunakan $setIsSubset operator untuk memeriksa apakah nilai yang diberikan ada dalam array. Ini terutama karena kami tidak dapat menggunakan $in operator kueri di $project panggung.

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

Dari MongoDB 3.0.x mundur, Anda memerlukan pendekatan yang berbeda dan kurang efisien menggunakan $map operator dan $setDifference operator.

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. Apa yang sebenarnya dimaksud dengan MongoDB yang tidak mematuhi ACID sebelum v4?

  2. NoClassDefFoundError => ClassPath$JavaContext saat menggunakan play start

  3. Memperbarui objek di dalam array dengan PyMongo

  4. node.js mongojs findOne panggilan balik mengembalikan kesalahan sebagai nol

  5. Apa cara tercepat untuk melihat kapan pembaruan terakhir ke MongoDB dibuat?