根据另一个字段的值在MongoDB中投影一个字段

时间:2018-08-30 04:39:38

标签: mongodb

我在MongoDB 4集合中有以下文档:

{
   "_id": <ObjectID>,
   "active_version": "3",
   "versions": {
     "1": "The first very long document",
     "2": "The second very long document",
     "3": "The third very long document"
   }
}

馆藏中有很多这样的文档,每个文档可能有很多版本。

查询此文档时,我只想检索当前版本的文本,例如“第三个很长的文件”。我该怎么办?

1 个答案:

答案 0 :(得分:2)

您可以使用$objectToArrayversions转换为kv对数组,然后将$let$filter$arrayElemAt一起使用以获取第一个匹配版本:

db.col.aggregate([
    {
        $project: {
            current_version: {
                $let: {
                    vars: {
                        version: {
                            $arrayElemAt: [
                                {
                                    $filter: {
                                        input: { $objectToArray: "$versions" },
                                        as: "v",
                                        cond: { $eq: [ "$$v.k", "$active_version" ] } 
                                    }
                                }
                            ,0]
                        }
                    },
                    in: "$$version.v"
                }
            }
        }
    }
])

输出:

{ "_id" : ..., "current_version" : "The third very long document" }