如何从这棵树中获取对象? :
{
"_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" : ""
}
级别可以是任何数字。
----儿童
$ arr = Categories :: findOne(['_ id'=>'55b97aa654bce61322002559']); 调试($ ARR);
也许我没有正确地构建db结构? 谢谢。
答案 0 :(得分: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;
}