我想知道我的两个最后一个条目之间的天数,mongoDb按天数分组。这是我的表:
------------------------------------------------- | mac address | date | ------------------------------------------------- | aa:bb:cc:dd:ee:ff | 2016-11-15 | | aa:bb:cc:dd:ee:ff | 2016-11-19 | | aa:bb:cc:dd:ee:ff | 2016-11-20 | | ff:ee:dd:cc:bb:aa | 2016-11-19 | | ff:ee:dd:cc:bb:aa | 2016-11-28 | | aa:aa:aa:aa:aa:aa | 2016-11-21 | | bb:bb:bb:bb:bb:bb | 2016-11-22 | | bb:bb:bb:bb:bb:bb | 2016-11-25 | | cc:cc:cc:cc:cc:cc | 2016-11-20 | | cc:cc:cc:cc:cc:cc | 2016-11-23 | -------------------------------------------------
这就是我想要的:
------------------------------------------------- | Number of days | count | ------------------------------------------------- | 1 day | 1 | | 2-7 days | 2 | | 8-30 days | 1 | | > 30 days | 0 | -------------------------------------------------
是否有可能使用mongodb在一个请求中执行此操作?
非常感谢。
答案 0 :(得分:3)
你可以在一个像这样的
的查询中完成 db.date.aggregate([
{
$sort:{
date:-1
}
},
{
$group:{
_id:"$mac",
date:{
$push:"$date"
}
}
},
{
$project:{
_id:"$mac",
laps:{
$subtract:[
{
$arrayElemAt:[
"$date",
0
]
},
{
$arrayElemAt:[
"$date",
1
]
}
]
}
}
},
{
"$group":{
"_id":null,
"1_day":{
"$sum":{
"$cond":[
{
"$lte":[
"$laps",
(1000 *60 * 60 * 24)
]
},
1,
0
]
}
},
"2_7days":{
"$sum":{
"$cond":[
{
$and:[
{
"$gt":[
"$laps",
(1000 *60 * 60 * 24*2)
]
},
{
"$lte":[
"$laps",
(1000 *60 * 60 * 24*7)
]
},
]
},
1,
0
]
}
},
"8_30days":{
"$sum":{
"$cond":[
{
$and:[
{
"$gt":[
"$laps",
(1000 *60 * 60 * 24*8)
]
},
{
"$lte":[
"$laps",
(1000 *60 * 60 * 24*30)
]
},
]
},
1,
0
]
}
},
"30+days":{
"$sum":{
"$cond":[
{
"$gte":[
"$laps",
(1000 *60 * 60 * 24*30)
]
},
1,
0
]
}
}
}
}
])
它会返回这样的东西:
{
"_id":null,
"1_day":1,
"2_7days":3,
"8_30days":0,
"30+days":0
}
您可能需要调整边界以更好地满足您的需求