【问题标题】:Find Subdocument by Id based on value in parent根据父项中的值按 Id 查找子文档
【发布时间】:2016-12-25 19:42:12
【问题描述】:

鉴于我有以下结构的文档:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-12
      • 2022-09-27
      • 1970-01-01
      • 2021-01-13
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多