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

Ambil hanya elemen yang ditanyakan dalam array objek di koleksi MongoDB

$elemMatch baru MongoDB 2.2 operator proyeksi menyediakan cara lain untuk mengubah dokumen yang dikembalikan agar hanya berisi pertama shapes . yang cocok elemen:

db.test.find(
    {"shapes.color": "red"}, 
    {_id: 0, shapes: {$elemMatch: {color: "red"}}});

Pengembalian:

{"shapes" : [{"shape": "circle", "color": "red"}]}

Di 2.2 Anda juga dapat melakukan ini menggunakan $ projection operator , di mana $ dalam nama bidang objek proyeksi mewakili indeks elemen larik pertama bidang yang cocok dari kueri. Berikut ini mengembalikan hasil yang sama seperti di atas:

db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});

Pembaruan MongoDB 3.2

Dimulai dengan rilis 3.2, Anda dapat menggunakan $filter new yang baru operator agregasi untuk memfilter larik selama proyeksi, yang memiliki manfaat menyertakan semua pertandingan, bukan hanya yang pertama.

db.test.aggregate([
    // Get just the docs that contain a shapes element where color is 'red'
    {$match: {'shapes.color': 'red'}},
    {$project: {
        shapes: {$filter: {
            input: '$shapes',
            as: 'shape',
            cond: {$eq: ['$$shape.color', 'red']}
        }},
        _id: 0
    }}
])

Hasil:

[ 
    {
        "shapes" : [ 
            {
                "shape" : "circle",
                "color" : "red"
            }
        ]
    }
]


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Penyatuan koneksi database MongoDB Java Driver dengan Tomcat

  2. Membuat database di Mongo:tidak dapat terhubung, koneksi gagal

  3. Masukkan file json ke mongodb

  4. Ubah string menjadi MongoDB BsonDocument

  5. Temukan dokumen dengan array yang tidak berisi dokumen dengan nilai bidang tertentu di MongoDB