【发布时间】:2019-02-26 18:58:53
【问题描述】:
我是 Mongo 的新手,我有以下任务:
运行 Mongo 3.4.2。
收藏:
[
{
"docID": "aaa111",
"version": 1,
"somefield1": "abc"
},
{
"docID": "aaa111",
"version": 2,
"somefield1": "abc",
"somefield2": "abc"
},
{
"docID": "bbb222",
"version": 1,
"somefield1": "abc",
"somefield2": "abc"
},
{
"docID": "bbb222",
"version": 2,
"somefield1": "abc",
"somefield3": "abc"
},
{
"docID": "bbb222",
"version": 3,
"somefield2": "abc",
"somefield3": "abc"
}
]
换句话说,具有相同 docID 的文档可能具有不同的“模式”。
我需要这个集合的查询返回的是具有最新版本的文档,以及这些特定文档的所有字段。
以下是基于上述集合的查询输出应如下所示:
[
{
"docID": "aaa111",
"version": 2,
"somefield1": "abc",
"somefield2": "abc"
},
{
"docID": "bbb222",
"version": 3,
"somefield2": "abc",
"somefield3": "abc"
}
]
我一直在尝试按如下方式使用 $aggregate 运算符:
db.collection.aggregate(
[
{ $sort: { docID: 1, version: 1 } },
{ $group:
{
_id: "$docID",
latestVersion: { $last: "$version" }
}
}
]
)
但这只会返回 2 个字段,docID 和最新版本。
然后我尝试使用 $in 运算符使用 find() 从该集合中进行选择,其中 $in 将接受上述查询,但是,一个问题是 $in 期望和数组,其次,我需要选择docID 和版本与子查询结果匹配的文档。
如何获取具有docID和最新版本的文档的所有字段?
感谢任何帮助。
提前致谢。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework