鉴于我有一份以下结构的文件:
{
selectedId: ObjectId("57b5fb2d7b41dde99009bc75"),
children: [
{_id: ObjectId("57b5fb2d7b41dde99009bc75"), val: 10},
{_id: ObjectId("57b5fb2d7b41dde99009bc75"), val: 20},
]
}
其中父值“selectedId”始终引用其中一个子ID,如何获取子子文档_id = selectedId?
我试过了:
parentModel.findOne({'selectedId': 'this.children._id'})
然而,正如我现在所知,第二个字符串被视为文字。那么如何在查询中引用父项的字段?
编辑:很明显,这可以通过两个查询完成,获取父级的“selectedId”值,然后再次查询。但是,我想在一个查询中执行此操作。
答案 0 :(得分:1)
您可以使用聚合框架,特别是利用 $arrayElemAt
和 $filter
运算符来返回子子文档。以下示例显示了这一点:
parentModel.aggregate([
{
"$project": {
"children": {
"$arrayElemAt": [
{
"$filter": {
"input": "$children",
"as": "item",
"cond": {
"$eq": ["$$item._id", "$selectedId"]
}
}
}, 0
]
}
}
}
]).exec(callback);