检索每个组中的最后一条记录 - MongoDB
Posted
技术标签:
【中文标题】检索每个组中的最后一条记录 - MongoDB【英文标题】:Retrieving the last record in each group - MongoDB 【发布时间】:2020-02-10 16:27:18 【问题描述】:有一个包含以下字段的项目集合:
id item_id quantity last_update
-------------------------------------------
1 111 10 2020-02-10 09:00:00
2 222 10 2020-02-10 09:00:00
2 222 15 2020-02-10 10:00:00
我想通过 id 和 item_id 检索每个组的最后更新记录。 结果应该是:
id item_id quantity last_update
-------------------------------------------
1 111 10 2020-02-10 09:00:00
2 222 15 2020-02-10 10:00:00
如果是 SQL ,那么我会这样做:
SELECT a.* FROM items a JOIN
( SELECT id ,item_id , max(last_update) as max_last_update
FROM items ) as b ON a.id=b.id AND a.item_id=b.item_id AND a.last_update=b.max_last_update
(或使用自连接)。
我是 mongoDB 新手,我做了如下内部查询:
inner_query = db.items.aggregate( $group : _id: id:"$id" , item_id:"$item_id", max_last_update: $max : "$last_update" )
如何使用 inner_query var 来获得预期的结果? Mongo 中的 JOIN 或子查询等价于什么? (我使用的是 mongodb 4.0.4)
谢谢!
【问题讨论】:
当你说“每个组的最后更新记录由 id 和 item_id”那么你应该得到所有三个文档。 您不需要自联接 - 无论是在 SQL 还是在 MongoDB 中 【参考方案1】:试试这个:
db.collection.aggregate([
$sort: id: 1, item_id: 1, last_update: -1 ,
$group:
_id: id: "$id", item_id: "$item_id" ,
last_update: $max: "$last_update" ,
quantity: $first: "$quantity" ,
,
$project:
last_update: 1,
quantity: 1,
id: "$_id.id",
item_id: "$_id.item_id",
_id: 0
])
注意,$sort
要正确,否则$frist
会返回错误值。
【讨论】:
以上是关于检索每个组中的最后一条记录 - MongoDB的主要内容,如果未能解决你的问题,请参考以下文章