该字段必须是mongo中的累加器对象[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我正在执行聚合查询。我的要求是我有以下格式的文档:

{
"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)
        }
    })
node.js mongodb aggregation
2个回答
0
投票

我修改了你的聚合查询。请尝试如下:

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)
        }
    })

0
投票

在这里,您正确地缺少匹配过滤器。我们应该使用$ match过滤器来查找特定结果,并使用“_id”来表示我们在$ group中执行操作的属性。

您的查询结构将是 -

db.students.aggregate(
[
    {
        $match: {
            "name": "a"
        }
    },
    {
        $group: {
            "_id": "$name",
            totalTte: {
                $sum: "$age"
            }
        }
    },
    {
        $project: {
            sum: 1
        }
    }
])
© www.soinside.com 2019 - 2024. All rights reserved.