mongodb - 字段 "$name"必须是累加器对象

标签 mongodb mongoose mongodb-query aggregation-framework

我有一个查询,当我使用 $group 时错误显示“字段“$name 必须是累加器对象”,如果删除字段“$name”一切正常并且我尝试仅使用“name”而不是“$name”并且错误继续存在。

   User.aggregate([
    {
      $match: {
        "storeKey": req.body.store        
      }
  },
  {
      $group: {
          "_id": "$_id",          
          "name": "$name",              
          "count": {
              "$sum": 1
          },
          "totalValue": {
              "$sum": "$value"
          }      
      }
  },
  {
    $sort: sort
  },
  {
     $skip: req.body.limit * req.body.page
  },
  {
     $limit: req.body.limit
  }
])...

最佳答案

有些聚合运算符只能在$group中使用聚合并命名为$group accumulators

正如您使用的 $sum在这里您还必须使用 name

{ "$group": {
  "_id": "$_id",
  "name": { "$first": "$name" },  //$first accumulator
  "count": { "$sum": 1 },  //$sum accumulator
  "totalValue": { "$sum": "$value" }  //$sum accumulator
}}

Accumulator 就像元素数组,它累积为数组。 $first -> 给出名字组中的第一个名字

例子: 所以如果你有 $_id 相同但不同的名字 ["Darik","John"] 指定 $first 将给出 Darik & 同样地 $last 将给出 John

关于mongodb - 字段 "$name"必须是累加器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54440636/

相关文章:

java - Spring Data + Mongo- 无分组字段求和

mongodb - 为什么多边形 GeoJSON 对象的坐标存储在数组的数组中?

node.js - 基于相关表的 Mongoose 过滤器

node.js - 使用 Mongoose 和 Node.Js 防止重复条目

mongodb - 如何在 Mongoose 数组中的每个值前面添加一个字符串?

javascript - 云代码函数未使用 Parse 服务器开源 API 执行

mongodb - 如何$unwind嵌入文档(非列表)

excel - NODE.JS: fatal error - JS 分配失败 - 进程内存不足,同时解析大型 excel 文件

javascript - 判断 collection.forEach 是否完成

javascript - 如何将字符串转换为 int MongoDB 数组