我有一些类似于这种结构的文件:
[
{"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字段和最大字段。我需要他们所有。非常感谢任何帮助。
答案 0 :(得分:1)
我想这就是你需要的:
db.collection.aggregate([
{'$sort': {'version': -1}},
{'$group': {
'_id': '$file_base',
'highest_version': { '$first' : '$version'},
'file_name': { '$first' : '$file_name'},
}
}
])