MongoDB,如何查询文档但限制该文档中的数组

时间:2014-10-04 19:52:11

标签: mongodb

我有以下文件:

 {
    _id: asdfasdf,
    title: "ParentA",
    children: [
        {
            _id: abcd <-- using new ObjectId() to generate these on creation
            title: "ChildA",
        },
        {
            _id: efgh,
            title: "ChildB"
        }
    ]
}

我想要做的是使用findOne,但我只希望返回的文档在其数组中包含一个子项。

苏多逻辑

Categories.findOne({ _id: "asdfasdf" }, { children: _Id: "abcd" });

我希望返回的文档如下所示:

{
    _id: asdfasdf,
    title: "ParentA",
    children: [
        {
            _id: abcd <-- using new ObjectId() to generate these on creation
            title: "ChildA",
        }
    ]
}

这样做的目的是让我可以将信息传递给编辑表单,然后在保存时更新数组中的单个子对象。

我对如何限制结果集感到困惑。

非常感谢!

----编辑----

尝试使用建议的重复问题作为参考后,我的结果中未定义。我真的想使用findOne而不是find()。在客户端上,集合对象(即使它包含一个项目)的处理方式与返回的单个(findOne)对象的处理方式不同。

这是我尝试过的。

db.Category.findOne({
        "_id": parentid,
        "children._id": childid
    },{
        "_id": childid,
        "children": {
            "$elemMatch": {
                "_id": childid
            }
        }
    });



db.Category.findOne({
        "_id": parentid            
    },{
        "children": {
            "$elemMatch": {
                "_id": childid
            }
        }
    });

我已经尝试了以上几种变体。

----编辑2 ----

根据评论,以下是以下查询的输出:

db.category.findOne({ "_id" : "9dYgKFczgiRcNouij"});
{
        "title" : "Appliances",
        "active" : true,
        "children" : [
                {
                        "_id" : ObjectId("680d55c6995ef6f0748278c2"),
                        "title" : "Laundry",
                        "active" : true
                                            },
                {
                        "_id" : ObjectId("2b4469c1a4c8e086942a1233"),
                        "title" : "Kitchen"
                        "active" : true
                },
                {
                        "_id" : ObjectId("4f5562ef7668839704c851d6"),
                        "title" : "Other"
                        "active" : true
                }
        ],
        "_id" : "9dYgKFczgiRcNouij"
}

所以我想也许我的问题是如何在数组中创建children._id。我使用新的ObjectId()来生成_id。

---编辑3 ---

db.category.findOne({
    "_id": "9dYgKFczgiRcNouij"            
},{
    "children": {
        "$elemMatch": {
            "_id": ObjectId("4f5562ef7668839704c851d6")
        }
    }
});

返回ObjectID未定义。

0 个答案:

没有答案