我是MongoDB的新手,在我的项目中,我正在保存对特定文档的任何更改,创建一个更改并增加版本字段的新文档。
例:
{_id:"X", number : "1", firstname : "John", lastname : "Sand", version : "1"}
{_id:"Y", number : "1", firstname : "John", lastname : "Snow", version : "2"}
{_id:"Z", number : "2", firstname : "Cersei", lastname : "Lannister", version: "1"}
当我必须显示数据时,我应该获得由字段"数字"区分的文档的最新版本
预期结果为:
{_id:"Y", number : "1", firstname : "John", lastname : "Snow", version : "2"}
{_id:"Z", number : "2", firstname : "Cersei", lastname : "Lannister", version: "1"}
有没有一种方法可以用一个查询来做到这一点?我正在寻找聚合,但主题非常分散。
如果number
元素是实体标识符,则可以使用聚合。
首先,您需要按version
值对文档进行排序。
然后,您需要按number
值对文档进行分组,并从组中获取第一个文档的值。
最后,您需要格式化数据输出。
例:
db.getCollection('collection_name').aggregate([
{
$sort: {'version': -1}
},
{
$group: {
_id: "$number",
original_id: {$first: "$_id"},
firstname: {$first: "$firstname"},
lastname: {$first: "$lastname"},
version: {$first: "$version"},
}
},
{
$project: {
_id: "$original_id",
number: "$_id",
firstname: 1,
lastname: 1,
version: 1
}
}
])