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

Bagaimana cara menanyakan struktur pohon secara rekursif dengan MongoDB?

Bergantung pada kasus penggunaan Anda, MongoDB v3.4 menyediakan pipa agregasi operator bernama $graphLookup . Operator agregasi dapat melakukan pencarian rekursif pada koleksi. Lihat definisi lainnya di Definisi $graphLookup .

Dengan menggunakan hierarki dan nilai dokumen Anda di atas sebagai contoh, Anda dapat mencoba menjalankan agregasi di bawah ini:

db.collectionName.aggregate([

                {$unwind:{
                        path:"$childrenIdList", 
                        preserveNullAndEmptyArrays: true}
                  }, 
                {$graphLookup:{
                        from:"collectionName", 
                        startWith:"$_id", 
                        connectFromField:"_id", 
                        connectToField:"childrenIdList", 
                        as:"myparents",  
                        restrictSearchWithMatch: {"_id"}}
                  }, 
                {$match: {"_id": 7 } },
                {$group:{
                        _id:"$_id", 
                        parents:{$addToSet:"$myparents._id"}
                  }}
]);

Di atas harus mengembalikan hasil seperti di bawah ini:

{ "_id" : 7, "parents" : [ [ 1, 2, 4 ] ] }

Karena itu, jika Anda memiliki banyak koleksi, kueri di atas mungkin tidak berfungsi karena Anda akan melakukan $unwind pada setiap dokumen dan tidak akan dapat menggunakan indeks. Seperti yang disarankan oleh orang lain, Anda harus mempertimbangkan kembali struktur model dokumen Anda. Lihat Struktur Pohon Model Data . Optimalkan berdasarkan logika aplikasi dan kasus penggunaan kueri Anda, dan biarkan skema dokumen fleksibel mengikuti.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana saya bisa meratakan array ganda di mongoDB?

  2. luwak agregat cara memetakan beberapa koleksi menjadi satu Array

  3. Menggunakan variabel dalam pernyataan pembaruan MongoDB

  4. Bagaimana cara membuat indeks bersarang di MongoDB?

  5. mongoDB 2.2.1 - basis data tidak valid