gpt4 book ai didi

date - 在mongodb中按日期分组

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:42 24 4
gpt4 key购买 nike

我正在开展一个项目,在该项目中我跟踪某个主题的点击次数。

我正在使用 mongodb,我必须按日期对点击次数进行分组(我想对 15 天的数据进行分组)。

我在 mongodb 中有以下格式的数据存储

{ 
"_id" : ObjectId("4d663451d1e7242c4b68e000"),
"date" : "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)",
"topic" : "abc",
"time" : "18:51:22"
}
{
"_id" : ObjectId("4d6634514cb5cb2c4b69e000"),
"date" : "Mon Dec 27 2010 18:51:23 GMT+0000 (UTC)",
"topic" : "bce",
"time" : "18:51:23"
}

我想按天(15 天)对主题:abc 的点击次数进行分组。我知道如何对其进行分组,但如何按存储在我的数据库中的日期进行分组

我正在寻找以下格式的结果

[
{
"date" : "date in log",
"click" : 9
},
{
"date" : "date in log",
"click" : 19
},
]

我已经编写了代码,但只有当日期是字符串时它才能工作(代码在这里 http://pastebin.com/2wm1n1ix )...请指导我如何分组

最佳答案

使用 Mongo 聚合框架的新答案

在提出并回答了这个问题后,10gen 发布了带有聚合框架的 Mongodb 2.2 版,现在这是执行此类查询的更好方法。这个查询有点挑战,因为你想按日期分组并且存储的值是时间戳,所以你必须做一些事情来将时间戳转换为匹配的日期。出于示例的目的,我将只编写一个获取正确计数的查询。

db.col.aggregate(
{ $group: { _id: { $dayOfYear: "$date"},
click: { $sum: 1 } } }
)

这将返回如下内容:

[
{
"_id" : 144,
"click" : 165
},
{
"_id" : 275,
"click" : 12
}
]

您需要使用$match 将查询限制在您感兴趣的日期范围内,并使用$project_id 重命名为日期。如何将一年中的某一天转换回日期留给读者作为练习。 :-)

10gen 有一个方便的 SQL to Mongo Aggregation conversion chart值得收藏。 date aggregation operators上也有专门的文章.

更高级一点,你可以使用:

db.col.aggregate([
{ $group: {
_id: {
$add: [
{ $dayOfYear: "$date"},
{ $multiply:
[400, {$year: "$date"}]
}
]},
click: { $sum: 1 },
first: {$min: "$date"}
}
},
{ $sort: {_id: -1} },
{ $limit: 15 },
{ $project: { date: "$first", click: 1, _id: 0} }
])

这将为您提供最近 15 天的信息,并在 date 字段中返回每天的一些日期时间。例如:

[
{
"click" : 431,
"date" : ISODate("2013-05-11T02:33:45.526Z")
},
{
"click" : 702,
"date" : ISODate("2013-05-08T02:11:00.503Z")
},
...
{
"click" : 814,
"date" : ISODate("2013-04-25T00:41:45.046Z")
}
]

关于date - 在mongodb中按日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35641115/

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