mongodb 关于 条件分组查询的问题

2021-05-17 17:31:38 +08:00
 EZVIK
[{
   _id :"1",
   value: 10
},
{
   _id :"1",
   value: 20
},
{
   _id :"1",
   value: 100
}...]

请教大家一个查询的问题,我想按照 value 的范围进行分组统计, 比如 0-50,返回的结果为

[ { "_id": "0_50", count: 2}, {"_id": "50_100": count: 1}]

类似这样, 不知是否可行

1229 次点击
所在节点    MongoDB
5 条回复
ch2
2021-05-17 18:01:26 +08:00
只能一项一项目来,像这样
```
collection.aggregate([{
"$project": {
"50": {
"$cond": {
"if": {"$eq": [50, "$value"]},
"then": 1,
"else": 0
}
},
"100": {
"$cond": {
"if": {"$eq": [100, "$value"]},
"then": 1,
"else": 0
}
}
}
},
{
"$group": {
"_id": "$id",
"50": {
"$sum": "$50"
},
"100": {
"$sum": "$100"
}
}
}])
```
EZVIK
2021-05-17 18:16:34 +08:00
@ch2 我试试看 谢谢!
catinsides
2021-05-17 18:18:33 +08:00
把楼上的$eq 换成 $and: [{$gte: ['$value', 50], {$lte: ['$value', 100]}}]
EZVIK
2021-05-17 18:33:55 +08:00
@catinsides 感谢 已经解决了。
EZVIK
2021-05-17 18:35:14 +08:00
解决方法 感谢楼上两位老哥
.aggregate([
{
"$project": {
"0_1000": {
"$cond": {
"if": {
$and: [{$gte: ['$value', 0]}, { $lte: ['$value', 1000] } ]
},
"then": 1,
"else": 0
}
}
}
},
{
"$group": {
"_id": "$id",
"0_1000": {
"$sum": "$0_10000
}
}
}
])

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX