获取最大的不同文档并返回所有字段

时间:2017-05-08 20:02:56

标签: python mongodb aggregation-framework pymongo

我有一些类似于这种结构的文件:

[
    {"file_base": "file_1", "version": 100, "file_name": "file_1_100.txt"},
    {"file_base": "file_1", "version": 200, "file_name": "file_1_200.txt"},
    {"file_base": "file_1", "version": 300, "file_name": "file_1_300.txt"},
    {"file_base": "file_2", "version": 100, "file_name": "file_2_100.txt"},
    {"file_base": "file_2", "version": 200, "file_name": "file_2_200.txt"},
    {"file_base": "file_2", "version": 300, "file_name": "file_2_300.txt"}
]

我需要创建一个查询来获取每个文件的最新版本并返回所有字段。到目前为止,我有这个:

pipeline = [
    {'$sort': {'version': -1}},
    {'$match': {}},
    {'$group': {
        '_id': '$file_base',
        'highest_version': {'$first': '$version'}
    }
    }
]

results = files_collection.aggregate(pipeline)

这几乎可以回归我的需要。它返回:

{'_id': 'file_2', 'highest_version': 300}
{'_id': 'file_1', 'highest_version': 300}

但我需要所有的领域。在此问题的实际版本中,每个文件还有更多字段。所以在这个例子的上下文中,我需要类似的东西:

{'_id': 'file_2', 'highest_version': 300, 'file_name': 'file_2_300.txt'}
{'_id': 'file_1', 'highest_version': 300, 'file_name': 'file_1_300.txt'}

This question类似,但它只返回grouped_by字段和最大字段。我需要他们所有。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我想这就是你需要的:

db.collection.aggregate([
    {'$sort': {'version': -1}},
    {'$group': {
        '_id': '$file_base',
        'highest_version': { '$first' : '$version'},
        'file_name': { '$first' : '$file_name'},
        }
    }
])