根据父级中的值按Id查找子文档

时间:2016-08-18 18:55:25

标签: node.js mongodb mongoose mongodb-query aggregation-framework

鉴于我有一份以下结构的文件:

{
    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”值,然后再次查询。但是,我想在一个查询中执行此操作。

1 个答案:

答案 0 :(得分:1)

您可以使用聚合框架,特别是利用 $arrayElemAt $filter 运算符来返回子子文档。以下示例显示了这一点:

parentModel.aggregate([
    {
        "$project": {
            "children": {
                "$arrayElemAt": [
                    {
                        "$filter": {
                            "input": "$children",
                            "as": "item",
                            "cond": {
                                "$eq": ["$$item._id", "$selectedId"]
                            }
                        }
                    }, 0
                ]
            }
        }
    }
]).exec(callback);