每个项目 mongodb 组的最新记录(按日期)
Posted
技术标签:
【中文标题】每个项目 mongodb 组的最新记录(按日期)【英文标题】:Latest record by date for each item mongodb group 【发布时间】:2015-04-03 09:24:37 【问题描述】:集合中有许多项目,每个项目都有许多记录,有些记录新日期,有些记录一周或/和一个月。我需要一个返回每个项目的最新最后记录的查询。在 .aggregate() 的情况下,我需要提交完整的“数据”。我想要这个结果使用 mongodb $group,每个设备的记录应该是最新的。
"result" : [
"_id" : 29,
"gateway_id" : 1,
"data" : [
"r" : 203,
"v" : 3002
,
"r" : 221,
"v" : 3006
],
"device_id" : 29,
"date_time" : "a"
,
"_id" : 28,
"gateway_id" : 1,
"data" : [
"r" : 203,
"v" : 3002
,
"r" : 221,
"v" : 3006
],
"device_id" : 28,
"date_time" : "b"
,
"_id" : 27,
"gateway_id" : 1,
"data" : [
"r" : 203,
"v" : 3642
,
"r" : 221,
"v" : 3666
],
"device_id" : 27,
"date_time" : "a"
],
"ok" : 1
我希望使用 mongodb $group 得到这个结果,每个设备的记录应该是最新的。
【问题讨论】:
【参考方案1】:试试下面的sn-p
db.collection.aggregate([
$group:
"_id": "$device_id",
"gateway_id": "$last":"$gateway_id",
"data": "$last": '$data',
"date": "$last": '$date_time',
,
$project:
"device_id": "$_id",
"gateway_id": "$gateway_id",
"data": "$data",
"date_time": "$date"
,
$sort:
"date": -1
]);
在上面按设备id和日期的查询组中,数据和gateway_id在每一行都是最新的。
【讨论】:
我认为如果你把排序放在第一位,你可以从索引中受益 $last 仅在文档处于定义顺序时才有意义 docs.mongodb.com/manual/reference/operator/aggregation/last【参考方案2】:我的回答是半相关的,但我要加入 convo 是因为我在寻找这个时登陆了这里。我想对字段 email
上的唯一列表进行分组,并返回在该组中找到的第一个文档,类似于 SQL 不同的查询。
client
.collection('email_list')
.aggregate([
// group documents unique by "email" field, add a new prop "doc" with the full document of the first doc found in the DB
$group: _id: '$email', doc: $first: '$$ROOT' ,
// replace the "root" document with the first document found in the DB
$replaceRoot: newRoot: '$doc' ,
])
.toArray()
【讨论】:
以上是关于每个项目 mongodb 组的最新记录(按日期)的主要内容,如果未能解决你的问题,请参考以下文章