2017-04-06 41 views
1

如何從此樹中獲取對象? :如何在mongoDb中從此樹中獲取對象?

{ 
    "_id" : ObjectId("33b97aa654bce61322002559"), 
    "name" : "Test", 
    "children" : [ 
     "_id" : ObjectId("44b97aa654bce61322002559"), 
     "name" : "Test Children", 
     "children" : [ 
      "_id" : ObjectId("55b97aa654bce61322002559"), 
      "name" : "Test Children Children", 
      "children" : "", 
      "products" : [ 
       "_id" : ObjectId("55b97aa654bce61322002559"), 
       "name" : "Product 1" //I need this object 
       "attrib" : [ 
        "sale" : 1, 
        "new" : 1, 
        "instock" : 1, 
       ] 
      ], 
      "products" : "" 
     ] 
    ], 
    "products" : "" 
} 

級別可以是任何數字。

  • 孩子
  • - 兒童
  • --children
  • ---兒童
  • ----兒童

    $ ARR =類別:: findOne([ '_ ID' =>'55b97aa654bce61322002559']); debug($ arr);

也許我沒有正確地塑造結構db? 謝謝。

+0

這是JSON對不對? – valbrux

+0

是的,這是JSON – Sharomet

+0

這看起來像一個MongoDB輸出?看數據,我認爲SQL可能更適合。如果這是不可能的,你可能會考慮製作2個集合:1個只存儲產品,另一個存儲這個層次結構作爲嵌套'_id's。 –

回答

0
//return an array of objects according to key, value, or key and value matching 
function getObjects(obj, key, val) { 
    var objects = []; 
    for (var i in obj) { 
     if (!obj.hasOwnProperty(i)) continue; 
     if (typeof obj[i] == 'object') { 
      objects = objects.concat(getObjects(obj[i], key, val)); 
     } else 
     //if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not) 
     if (i == key && obj[i] == val || i == key && val == '') { // 
      objects.push(obj); 
     } else if (obj[i] == val && key == ''){ 
      //only add if the object is not already in the array 
      if (objects.lastIndexOf(obj) == -1){ 
       objects.push(obj); 
      } 
     } 
    } 
    return objects; 
}