根据父文档中的值通过Id查找子文档



假设我有一个结构如下的文档:

{
    selectedId: ObjectId("57b5fb2d7b41dde99009bc75"),
    children: [
        {_id: ObjectId("57b5fb2d7b41dde99009bc75"), val: 10},
        {_id: ObjectId("57b5fb2d7b41dde99009bc75"), val: 20},
    ]
}

其中父值"selectedId"总是引用子Id之一,我如何获得子子文档,其中_id = selectedId?

我尝试:

parentModel.findOne({'selectedId': 'this.children._id'})
然而,正如我现在所知道的,第二个字符串被作为字面量。那么如何在查询中引用父字段呢?

Edit:显然,这可以通过两个查询来完成,获取父节点的"selectedId"值,然后再次查询。但是,我想在单个查询中完成此操作。

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

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

相关内容

  • 没有找到相关文章

最新更新