我在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"
}
}
馆藏中有很多这样的文档,每个文档可能有很多版本。
查询此文档时,我只想检索当前版本的文本,例如“第三个很长的文件”。我该怎么办?
答案 0 :(得分:2)
您可以使用$objectToArray将versions
转换为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" }