基于另一个字段的值在MongoDB中投影一个字段

基于另一个字段的值在MongoDB中投影一个字段,mongodb,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" } } { “_id”:, “活动版本”:“3”,

我在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"
   }
}
{
“_id”:,
“活动版本”:“3”,
“版本”:{
“1”:“第一份很长的文件”,
“2”:“第二个很长的文件”,
“3”:“第三份很长的文件”
}
}
集合中有许多这样的文档,每个文档可能有多个版本

查询此文档时,我只想检索活动版本的文本,例如“第三个很长的文档”。如何实现这一点?

您可以使用将
版本转换为k-v对数组,然后使用和获得第一个匹配版本:

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" }

它表示
活动版本=版本。3
?json格式的预期输出应该是什么?确切地说,确切的json格式并不重要,但我希望它只返回
版本中的字符串。3