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

Ambil satu properti dari dokumen

Di MongoDB 2.0 dan yang lebih lama, ini tidak mungkin. Yang ingin Anda lakukan adalah mengembalikan elemen tertentu dari larik - tetapi bukan itu yang sebenarnya dilakukan oleh proyeksi Anda, itu hanya akan mengembalikan seluruh larik dan kemudian elemen z dari masing-masingnya.

Namun, dengan 2.2 (rc2 pada saat menulis jawaban ini), segalanya menjadi sedikit lebih baik. Sekarang Anda dapat menggunakan $elemMatch sebagai bagian dari proyeksi Anda (lihat SERVER-2238 untuk detailnya) sehingga Anda hanya menarik kembali elemen array yang diperlukan. Jadi, coba sesuatu seperti ini:

db.foo.find({"ID":"123",'a':{$elemMatch:{'x':"/"}}},{_id : 0, 'a.$': 1})
//returns
{ "a" : [ { "x" : "/", "y" : "2000", "z" : "1000" } ] }

Atau, cukup gunakan $elemMatch dalam proyeksi itu sendiri, yang mungkin menurut Anda lebih bersih:

db.foo.find({"ID":"123"},{_id : 0, 'a':{$elemMatch:{'x':"/"}}})
//returns 
{ "a" : [ { "x" : "/", "y" : "2000", "z" : "1000" } ] }

Jadi, sekarang, setidaknya larik yang dikembalikan hanyalah larik yang hanya berisi entri yang Anda inginkan dan Anda cukup mereferensikan elemen z yang relevan (proyeksi elemMatch pada subdokumen belum didukung).

Last but not least, di 2.2 kami memiliki kerangka kerja agregasi, dan salah satu hal yang dapat dilakukan (dengan $project operator, adalah untuk membentuk kembali dokumen Anda dan mengubah sub dokumen dan elemen larik menjadi larik tingkat atas. Untuk mendapatkan hasil yang Anda inginkan, Anda akan melakukan sesuatu seperti ini:

db.foo.aggregate( 
        {$match : {"ID":"123"}},  
        {$unwind : "$a"},  
        {$match : {"a.x":"/"}},  
        {$project : {_id : 0, z : "$a.z"}}
)

Hasilnya terlihat seperti ini:

{ "result" : [ { "z" : "1000" } ], "ok" : 1 }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menemukan peringatan MongoDB setelah mengonversi set replika menjadi server yang berdiri sendiri

  2. Penyimpanan NodeJS + Ekspres + Sesi Mongo

  3. Kesalahan luwak:Tidak dapat memperbarui __v dan __v secara bersamaan

  4. Nama Koleksi Numerik Hapus

  5. XML ke BSON menggunakan C#