我有以下文件:
{
_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未定义。