douju1968
2017-04-06 13:38
浏览 210

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

How do I get an object from this tree? :

{
    "_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" : ""
}

Levels can be any number.

  • children
  • -children
  • --children
  • ---children
  • ----children

    $arr = Categories::findOne(['_id' => '55b97aa654bce61322002559']); debug($arr);

Maybe I'm not shaping the structure db correctly? Thank you.

图片转代码服务由CSDN问答提供 功能建议

如何从此树中获取对象? :

  {
“_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”//我需要此对象
“  attrib“:[
”sale“:1,
”new“:1,
”“instock”:1,
] 
],
“产品”:“”
] 
],  
“产品”:“”
} 
   
 
 

级别可以是任意数字。

  • 儿童
  • - 儿童
  • - 儿童
  • ---儿童
  • - ---孩子

    $ arr = Categories :: findOne(['_ id'=>'55b97aa654bce61322002559']); deb ug($ arr);

    也许我没有正确地修改结构db? 谢谢。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongzhuang6417 2017-04-06 14:16
    已采纳
    //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;
    }
    
    打赏 评论

相关推荐 更多相似问题