gpt4 book ai didi

MongoDB - 查询过去几个小时内创建的所有文档,并按分钟分组?

转载 作者:可可西里 更新时间:2023-11-01 09:36:45 25 4
gpt4 key购买 nike

通过阅读那里的各种文章,我相信这应该是可能的,但我不确定从哪里开始。

这就是我想要做的:

我想运行一个查询,它会找到在过去一小时内创建的所有文档,并按分钟对所有文档进行分组,并且由于每个文档都有一个 tweet 值,例如 5、6 或 19,所以将它们加起来每分钟都提供一个总和。

这是该集合的示例:

{
"createdAt": { "$date": 1385064947832 },
"updatedAt": null,
"tweets": 47,
"id": "06E72EBD-D6F4-42B6-B79B-DB700CCD4E3F",
"_id": "06E72EBD-D6F4-42B6-B79B-DB700CCD4E3F"
}

这可以在 mongodb 中实现吗?

@zero323 - 我首先尝试像这样对最后一个小时进行分组:

db.tweetdatas.group( {
key: { tweets: 1, 'createdAt': 1 },
cond: { createdAt: { $gt: new Date("2013-11-20T19:44:58.435Z"), $lt: new Date("2013-11-20T20:44:58.435Z") } },
reduce: function ( curr, result ) { },
initial: { }
} )

但这只会返回时间范围内的所有推文,这在技术上是我想要的,但现在我想按每分钟对它们进行分组,然后将每分钟的推文总和加起来。

@almypal

根据您的建议,这是我正在使用的查询:

db.tweetdatas.aggregate(
{$match:{ "createdAt":{$gt: "2013-11-22T14:59:18.748Z"}, }},
{$project: { "createdAt":1, "createdAt_Minutes": { $minute : "$createdAt" }, "tweets":1, }},
{$group:{ "_id":"$createdAt_Minutes", "sum_tweets":{$sum:"$tweets"} }}
)

但是,它显示的是这个响应:

{ "result" : [ ], "ok" : 1 }

更新:来自@almypal 的回复有效。显然,像我在上面的例子中那样输入日期是行不通的。当我在 shell 中从 Node 运行此查询时,我认为将 var date 转换为字符串并在 shell 中使用它会更容易。

最佳答案

使用聚合如下:

  var lastHour = new Date();
lastHour.setHours(lastHour.getHours()-1);

db.tweetdatas.aggregate(
{$match:{ "createdAt":{$gt: lastHour}, }},
{$project: { "createdAt":1, "createdAt_Minutes": { $minute : "$createdAt" }, "tweets":1, }},
{$group:{ "_id":"$createdAt_Minutes", "sum_tweets":{$sum:"$tweets"} }}
)

结果是这样的

 {
"result" : [
{
"_id" : 1,
"sum_tweets" : 117
},
{
"_id" : 2,
"sum_tweets" : 40
},
{
"_id" : 3,
"sum_tweets" : 73
}
],
"ok" : 1
}

其中 _id 对应于特定分钟,sum_tweets 是该分钟内的推文总数。

关于MongoDB - 查询过去几个小时内创建的所有文档,并按分钟分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com