Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB按聚合查询分组_Node.js_Mongodb_Group By_Pipeline_Aggregation - Fatal编程技术网

Node.js MongoDB按聚合查询分组

Node.js MongoDB按聚合查询分组,node.js,mongodb,group-by,pipeline,aggregation,Node.js,Mongodb,Group By,Pipeline,Aggregation,我掌握的数据是: [ {type:'软件'}, {type:'hardware'}, {type:'软件'}, {type:'network'}, {type:'test'}, ... ] 我想通过聚合管道创建一个MongoDB组,以返回如下数据: 我只想要结果中的3个对象 结果{u id:'other',count:2}中的第三个对象,这应该是软件和硬件以外类型的计数之和 [ {{u id:'软件',计数:2}, {u id:'硬件',计数:1}, {{u id:'其他',计数:2}, ]

我掌握的数据是:

[
{type:'软件'},
{type:'hardware'},
{type:'软件'},
{type:'network'},
{type:'test'},
...
]
我想通过聚合管道创建一个MongoDB组,以返回如下数据: 我只想要结果中的3个对象 结果{u id:'other',count:2}中的第三个对象,这应该是软件和硬件以外类型的计数之和

[
{{u id:'软件',计数:2},
{u id:'硬件',计数:1},
{{u id:'其他',计数:2},
]
如果这些数据是单独的文档,那么这是您需要的。只需在组之前添加
$project
阶段,然后添加操作员。(如果这些字段数据是数字,您可能需要检查

db.collection.aggregate([
{
“$project”:{
类型:{
“$switch”:{
“分支机构”:[
{
“案例”:{
“$eq”:[
“$type”,
“软件”
]
},
“然后”:“软件”
},
{
“案例”:{
“$eq”:[
“$type”,
“硬件”
]
},
“然后”:“硬件”
}
],
默认值:“其他”
}
}
}
},
{
“$group”:{
“_id”:“$type”,
“计数”:{
“$sum”:1
}
}
}
])
另外,我建议避免使用字段名
type
。实际上它在MongoDB中没有保留,但是它可能会与某些驱动程序发生冲突,因为在模式/模型文件中,类型字段引用的是字段的确切BSON类型

如果这些数据是单独的文档,则需要这样做。只需在组之前添加
$project
阶段,然后添加运算符。(如果这些字段数据是数字,则可能需要检查。)

db.collection.aggregate([
{
“$project”:{
类型:{
“$switch”:{
“分支机构”:[
{
“案例”:{
“$eq”:[
“$type”,
“软件”
]
},
“然后”:“软件”
},
{
“案例”:{
“$eq”:[
“$type”,
“硬件”
]
},
“然后”:“硬件”
}
],
默认值:“其他”
}
}
}
},
{
“$group”:{
“_id”:“$type”,
“计数”:{
“$sum”:1
}
}
}
])
另外,我建议避免使用字段名
type
。实际上它在MongoDB中没有保留,但是它可能会与某些驱动程序发生冲突,因为在模式/模型文件中,类型字段引用的是字段的确切BSON类型



这些数据是存储在单个文档的字段中,还是存储在单独的文档中?@AlexZeDim这些是单独的文档。如果我的答案正确,您可能希望通过按评级下方的绿色标记来检查并接受我的答案(如果我的答案正确,可能会向上投票)我更新了我的查询,您可以再次检查结果。这些数据是存储在单个文档的字段中,还是存储在单独的文档中?@AlexZeDim这些是单独的文档。您可能希望通过按评级下方的绿色标记来检查并接受我的答案(如果我的答案正确,可能会向上投票)我更新了我的查询,您可以再次检查结果。这不起作用,因为结果{{u id:'其他',计数:2}中的第三个对象,这应该是其他软件和硬件类型的计数之和。您的查询得到的结果是[{{u id:'测试”,“计数”:1},{u id:'网络”,“计数”:1},{“_id”:“软件”,“计数”:2},{“_id”:“硬件”,“计数”:1}]哦,那么,用这样的澄清更新问题,我会更新我的答案,你绝对确定,你需要聚合框架,而不是3个单独的请求吗?最好是并行处理3个请求,而不是使用3个请求。你不认为3个请求需要更多的时间才能得到结果吗?你建议使用$f吗acet(聚合)?@sandy在这种情况下使用
$facet
我想是“太多了”。我在想
。在
承诺中查找
。所有的[查询]
,但我重新思考了我自己的想法并猜测,如果你的集合被着色,
countDocumentsSP
不能成为一个选项。由于结果中的第三个对象,这不起作用{{u-id:'other',count:2},这应该是其他类型的软件和硬件的计数之和。我为您的查询得到的结果是[{u-id:“test”,“count”:1},{u-id:“network”,“count”:1},{{u-id:“software”,“count”:2},{{u-id:“hardware”,“count”:1}]哦,那么,用这样的澄清更新问题,我会更新我的答案,你绝对确定,你需要聚合框架,而不是3个单独的请求吗?最好是并行处理3个请求,而不是使用3个请求。你不认为3个请求需要更多的时间才能得到结果吗?你建议使用$f吗acet(聚合)?@sandy在这种情况下使用
$facet
我想是“太多了”。我在想
。在
Promise中查找
。所有的[查询]
,但我重新思考了我自己的想法并猜测,如果你的收藏被着色,
CountDocumentsSP
就不能成为一个选项。