我有一个包含以下文档的集合:
{ id: 1, version: 1 }, { id: 1, version:2 }, { id: 2, version: 1 }
是否可以构造一个查询,为每个id获取最大版本的文档,以便查询返回此内容?
[{ id: 1, version: 2}, { id: 1, version: 1 }]
答案 0 :(得分:1)
是的,但请注意警告:
db.coll.aggregate({ $group : { _id : "$groupId", version : { $max : "$version"} } } );
我冒昧地将id
重命名为groupId
,因为我发现id
(非关键,不是唯一)和_id
(PK)令人恼火
从组中查找最大项是一个有点复杂的问题,因为它需要在组内进行分组和排序 - 虽然可以使用聚合框架,但建议在大型集合上避免这种类型的读取大量查询。
保留对最新版本的引用可能是一个更好的主意,例如引入groups
集合并在其中保留currentVersion
(或对当前版本文档的直接_id
引用)。必须在插入时更新,但使查询更容易。