node.js - 该字段必须是 mongo 中的累加器对象
问题描述
我正在执行聚合查询。我的要求是我有以下格式的文档:
{
"name":"a","age":20},
{
"name":"b","age":23},
{
"name":"a","age":26}
我需要对姓名字段中包含“a”的所有姓名的年龄求和。我正在执行以下操作,但它给了我一个错误“字段'名称'必须是一个累加器对象”:
db.collection('students').aggregate({
$group: {"name": "a", "sum": {$sum: '$age'}}
}, {
$project: {sum: '$sum'}
}, (e, d) => {
if (!e) {
var e = d.stream({transform: JSON.stringify});
console.log("answer")
console.log(e);
deferred.resolve(e);
} else {
console.log(e)
}
})
解决方案
我更改了您的聚合查询。尝试如下:
db.collection('students').aggregate(
[
{
$match: {
name: "a"
}
},
{
$group: {_id: "$name",
"sum": {
$sum: '$age'
}
}
},
{
$project: {
sum: 1
}
], (e, d) => {
if (!e) {
var e = d.stream({transform: JSON.stringify});
console.log("answer")
console.log(e);
deferred.resolve(e);
} else {
console.log(e)
}
})
推荐阅读
- java - 在java中使用''中的属性字段值?
- http - 几次请求后删除了 Cookies 标头
- python - 如果列值的组合等于列表中的元组,则删除 Pandas 中的 dataFrame 行
- swift - cell.textLabel.text 不附加
- excel - Excel 接受更改
- swift - swift4中的UIview数组排序返回错误“Bool'需要2个参数,但闭包体中使用了1个”
- javascript - Javascript For 循环中的未定义属性
- mysql - React-Admin 演示项目正在使用的 SQL 数据库
- c++ - Arduino数组和if语句
- javascript - 升级到 Angular 6 和 jQuery 停止工作