如何在mongoDb中从此树中获取对象?

时间:2017-04-06 13:38:58

标签: php mongodb mongodb-query

如何从这棵树中获取对象? :

{
    "_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结构? 谢谢。

1 个答案:

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