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

Mongodb:menghitung connectToField di dalam graphlookup

connectToField adalah nama, bukan ekspresi. Anda tidak dapat melakukan apa pun dengannya.

Anda benar-benar perlu mempertimbangkan kembali skema. Itu cacat dalam banyak hal mulai dari nama yang tidak unik yang digunakan dalam referensi induk. Karena Anda mengandalkan string jalur sebagai gantinya , Anda memerlukan jalur untuk mereferensikan induknya.

Jawaban di bawah ini menjalankannya, dan hampir tidak disarankan untuk kueri operasional karena inefisiensi kinerja dan beberapa asumsi tentang bagaimana jalan itu dibangun. Ini dapat digunakan sebagai permintaan satu kali saja.

Pada dasarnya Anda perlu membuat tampilan dengan jalur induk yang dihitung:

db.createView("rootless_tree", "tree", [
    { $match: { parent: { $ne: null } } },
    { $addFields: {
        parent_path: { $let: {
            vars: { parents: { $split: [ "$path", "#" ] } },
            in: { $reduce: {
                input: { $slice: [ "$$parents", 1, { $subtract: [ { $size: "$$parents" }, 2 ] } ] },
                initialValue: "",
                in: { $concat: [ "$$value", "#", "$$this" ] }
            } }
        } }
    } }
]);

Jadi Anda dapat melakukan pencarian seperti yang disarankan pada pertanyaan Anda sebelumnya:

db.tree.aggregate([
    { $graphLookup: {
        from: "rootless_tree", 
        startWith: "$path", 
        connectFromField: "path", 
        connectToField: "parent_path", 
        as:"dep"
    } },
    { $match: { dep: [] } },                       
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Koneksi persisten atau penyatuan koneksi di PHP54+ Nginx + PHPFPM + MongoDB

  2. Apa praktik terbaik untuk menghubungkan/memutuskan koneksi ke database?

  3. Bagaimana cara menghubungkan kembali ke MongoDB menggunakan driver C++?

  4. Luwak findOneAndUpdate dan runValidators tidak berfungsi

  5. 6 Praktik Terbaik untuk Menyebarkan MongoDB di Amazon EC2