【问题标题】:The field must be an accumulator object in mongo [duplicate]该字段必须是mongo中的累加器对象[重复]
【发布时间】:2019-07-16 08:14:15
【问题描述】:

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

{
"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


    【解决方案1】:

    我更改了您的聚合查询。尝试如下:

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

    【讨论】:

    • 谢谢兄弟!它奏效了。
    【解决方案2】:

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

    您的查询结构将是 -

    db.students.aggregate(
    [
        {
            $match: {
                "name": "a"
            }
        },
        {
            $group: {
                "_id": "$name",
                totalTte: {
                    $sum: "$age"
                }
            }
        },
        {
            $project: {
                sum: 1
            }
        }
    ])
    

    【讨论】:

    • 是的,你是对的。无论如何我想通了。不过感谢您的指点。
    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 2017-10-17
    • 2019-06-23
    • 1970-01-01
    • 2019-09-20
    • 2015-08-07
    • 2017-06-12
    • 2018-01-01
    相关资源
    最近更新 更多