如何获取最新版本的文档列表,其中“版本”是一个字段?

时间:2019-04-24 07:57:54

标签: mongodb

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

是否有一种方法可以对一个查询执行此操作? 我正在寻找汇总信息,但是主题非常分散。

1 个答案:

答案 0 :(得分:0)

如果number元素是实体标识符,则可以使用聚合。

首先,您需要使用versionsort个文档。

然后,您需要使用numbergroup个文档,并从组中获取first文档的值。

最后,您需要格式化数据输出。

示例:

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
        }
    }
])