字段“ $ name”必须是一个累加器对象

Mat*_*eus 6 mongoose mongodb 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
  }
])...
Run Code Online (Sandbox Code Playgroud)

Ash*_*shh 5

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

就像您$sum在这里使用的一样,您也必须使用name钥匙

{ "$group": {
  "_id": "$_id",
  "name": { "$first": "$name" },  //$first accumulator
  "count": { "$sum": 1 },  //$sum accumulator
  "totalValue": { "$sum": "$value" }  //$sum accumulator
}}
Run Code Online (Sandbox Code Playgroud)

累加器就像元素数组一样,其累加为数组。$ first->给出名称组中的第一个名称

示例:因此,如果您使用$_id相同但不同的名称,则["Darik","John"] 指定的名称$first将为Darik,类似的名称$last将为John

  • 在应用“$group”阶段后,“$first”将始终为您提供第一个文档。类似地,“$last”将为您提供最后一个文档。 (3认同)
  • 使用 `$$ROOT` @,mufazmi (3认同)