MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB से Node.Js में JSON ट्री बनाएं

मान लें कि आपको डेटा का पालन करना है (पहले से ही डीबी से लोड किया गया है):

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" ] }
];

चूंकि _id अद्वितीय है, तो पहले चरण में आप इसे शब्दकोश में बदल देते हैं, जहां कुंजी आईडी हैं:

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

अब आप data . के माध्यम से लूप करें एक बार और सरणी और बच्चों को सेट करें:

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;
}

और वोइला, आपका काम हो गया:

JSON.stringify(data);

संपादित करें

यदि आप केवल जड़ें चाहते हैं (नोड्स जो किसी अन्य नोड के बच्चे नहीं हैं), तो पहले आपको उन्हें ढूंढना होगा:

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);

बच्चों को संदर्भित करते समय माता-पिता को स्टोर करना अधिक कुशल तरीका होगा (संपादित करें ऊपर दिए गए कोड के साथ तुलना करें):

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. MongoDB और Golang के साथ लुकअप के संदर्भ में मान प्राप्त करें

  2. MongoDB (mongoengine) में कुंजी द्वारा एक सूची के अंदर एक शब्दकोश प्राप्त करना

  3. मैपर से मोंगोडब की वस्तु तक पहुंचना (MapReduce)

  4. मोंगोडब एकत्रीकरण पाइपलाइन समूह पुश को कैसे सीमित करें

  5. MERN स्टैक वेब एप्लिकेशन में छवियों को संग्रहीत करने का सबसे अच्छा तरीका