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

Buat pohon JSON di Node.Js dari MongoDB

Katakanlah Anda harus mengikuti data (sudah dimuat dari db):

var data = [
  { _id: "MongoDB", children: [] },
  { _id: "Postgres", children: [] },
  { _id: "Databases", children: [ "MongoDB", "Postgres" ] },
  { _id: "Languages", children: [] },
  { _id: "Programming", children: [ "Databases", "Languages" ] },
  { _id: "Books", children: [ "Programming" ] }
];

Sejak _id unik, maka pada langkah pertama Anda mengubahnya menjadi kamus, di mana kuncinya adalah id:

var dct = {};
for (var i = 0; i < data.length; i++) {
    var doc = data[i];
    dct[doc._id] = doc;
}

Sekarang Anda mengulang data susun sekali lagi dan atur anak-anak:

for (var i = 0; i < data.length; i++) {
    var doc = data[i];
    var children = doc.children;
    var ref_children = [];
    for (var j = 0; j < children.length; j++) {
        var child = dct[children[j]]; // <-- here's where you need the dictionary
        ref_children.push(child);
    }
    doc.children = ref_children;
}

Dan voila, Anda sudah selesai:

JSON.stringify(data);

EDIT

Jika Anda hanya menginginkan root (simpul yang bukan turunan dari simpul lain), maka pertama-tama Anda harus menemukannya:

var get_parent = function(node, docs) {
    for (var i = 0; i < docs.length; i++) {
        var doc = docs[i];
        if (doc.children.indexOf(node) != -1) {
            return doc;
        }
    }
    return null;
};

var roots = [];
for (var i = 0; i < docs.length; i++) {
    var doc = data[i];
    if (get_parent(doc, docs) === null) {
        roots.push(doc);
    }
}
JSON.stringify(roots);

Cara yang lebih efisien adalah dengan menyimpan orang tua saat mendereferensikan anak-anak (bandingkan dengan kode di atas EDIT):

for (var i = 0; i < data.length; i++) {
    var doc = data[i];
    var children = doc.children;
    var ref_children = [];
    for (var j = 0; j < children.length; j++) {
        var child = dct[children[j]]; // <-- here's where you need the dictionary
        child.has_parent = true; // <-- has a parent
        ref_children.push(child);
    }
    doc.children = ref_children;
}

var roots = [];
for (var i = 0; i < data.length; i++) {
    var doc = data[i];
    if (!doc.has_parent) {
        roots.push(doc);
    }
}
JSON.stringify(roots);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara menghapus beberapa catatan yang dipilih dalam koleksi di MongoDB menggunakan kompas MongoDB

  2. Bagaimana cara melakukan kueri MongoDB ini menggunakan java?

  3. Apa yang terjadi ketika mongodb kehabisan memori?

  4. Bagaimana menjalankan agregat di mongodb dalam kerangka laravel

  5. Kueri lokasi dalam radius di MongoDB