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

Cara memfilter array dalam subdocument dengan MongoDB

Menggunakan aggregate adalah pendekatan yang tepat, tetapi Anda perlu $unwind list array sebelum menerapkan $match sehingga Anda dapat memfilter elemen individual dan kemudian menggunakan $group untuk menyatukannya kembali:

db.test.aggregate([
    { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
    { $unwind: '$list'},
    { $match: {'list.a': {$gt: 3}}},
    { $group: {_id: '$_id', list: {$push: '$list.a'}}}
])

keluaran:

{
  "result": [
    {
      "_id": ObjectId("512e28984815cbfcb21646a7"),
      "list": [
        4,
        5
      ]
    }
  ],
  "ok": 1
}

Pembaruan MongoDB 3.2

Dimulai dengan rilis 3.2, Anda dapat menggunakan $filter new yang baru operator agregasi untuk melakukan ini secara lebih efisien dengan hanya menyertakan list elemen yang Anda inginkan selama $project :

db.test.aggregate([
    { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
    { $project: {
        list: {$filter: {
            input: '$list',
            as: 'item',
            cond: {$gt: ['$$item.a', 3]}
        }}
    }}
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB-sebagai-Layanan di Akun Amazon AWS Anda Sendiri

  2. Urutan tanggapan ke MongoDB $ dalam kueri?

  3. VersionError:Tidak ada dokumen yang cocok ditemukan kesalahan pada Node.js/Mongoose

  4. API Python mana yang harus digunakan dengan Mongo DB dan Django

  5. Nodejs / Express - Meluncurkan aplikasi saya:express.createServer() sudah usang