gpt4 book ai didi

mongodb - 获取按日期分组的列中不同值的计数 mongodb

转载 作者:行者123 更新时间:2023-12-02 04:07:56 25 4
gpt4 key购买 nike

我正在尝试运行一个 mongodb 查询,对于请求的每一天,它将返回不同列中唯一值的计数。例如,对于六月,查询将返回日期以及该日期 b 列中不同值的计数。任何人都知道如何做到这一点,我尝试了几种不同的方法,但没有运气

下面是几个示例文档,以及输出应该是什么

{
"_id" : ObjectId("578fa05a7391bb0d34bd3c28"),
"IP" : "123.123.123.123",
"datetime" : ISODate("2016-07-20T10:04:56-05:00")
},
{
"_id" : ObjectId("578fa05a7391bb0d34bd3c28"),
"IP" : "110.123.1.2",
"datetime" : ISODate("2016-07-20T10:04:56-05:00"),
}

输出应该是

{
"date":"2016-07-20",
count:2 -- this is distinct number of IPs for the date above
}

最佳答案

使用聚合,您可以执行以下操作:

  • 2 $project
  • 2 $group

这两个项目用于将日-月-年拆分为一个新字段,以便在 $group 中按其分组

mongo 查询是:

 db.device.aggregate([{
$project: {
_id: 1,
IP: 1,
day: {
"$dayOfMonth": "$datetime"
},
month: {
"$month": "$datetime"
},
year: {
"$year": "$datetime"
}
}
}, {
$project: {
_id: 1,
IP: 1,
datetime: {
$concat: [{
$substr: ["$year", 0, 4]
},
"-", {
$substr: ["$month", 0, 2]
},
"-", {
$substr: ["$day", 0, 2]
}
]
}
}
}, {
$group: {
_id: {
date: "$datetime",
IP: "$IP"
}
}
}, {
$group: {
_id: "$_id.date",
count: {
$sum: 1
}
}
}])

$sum:1 用于计算您的字段

它会给你这样的东西:

{ "_id" : "2016-7-20", "count" : 2 }
{ "_id" : "2016-8-20", "count" : 1 }

对于输入数据:

> db.device.find()
{ "_id" : ObjectId("578fa05a7391bb0d34bd3c28"), "IP" : "123.123.123.123", "datetime" : ISODate("2016-07-20T15:04:56Z") }
{ "_id" : ObjectId("578fa05a7391bb0d34bd3c29"), "IP" : "110.123.1.2", "datetime" : ISODate("2016-07-20T15:04:56Z") }
{ "_id" : ObjectId("578fa05a7391bb0d34bd3c25"), "IP" : "110.123.1.2", "datetime" : ISODate("2016-07-20T15:04:56Z") }
{ "_id" : ObjectId("578fa05a7391bb0d34bd3c30"), "IP" : "110.123.1.2", "datetime" : ISODate("2016-08-20T15:04:56Z") }
{ "_id" : ObjectId("578fa05a7391bb0d34bd3c12"), "IP" : "110.123.1.2", "datetime" : ISODate("2016-08-20T15:04:56Z") }

关于mongodb - 获取按日期分组的列中不同值的计数 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486903/

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