【问题标题】:The field must be an accumulator object该字段必须是一个累加器对象
【发布时间】:2020-01-01 20:42:10
【问题描述】:

我刚刚阅读了关于 mongoose 中的聚合的内容,这似乎是一种非常有用的方法,我只是自己测试了一些东西,所以这是我在数据库中的数据:

[
  {
    product: "chanchuris arayi",
    myidveli: "lg",
    pasi: 12
  },
  {
    product: "kalbasi",
    myidveli: "maiko",
    pasi: 10
  },
  {
    product: "chanchuris arayi",
    myidveli: "zaza",
    pasi: 12
  },
  {
    product: "sulguni",
    myidveli: "shotiko",
    pasi: 7
  },
  {
    product: "kalbasi",
    myidveli: "lg",
    pasi: 10
  }
]

这是我的代码

db.collection.aggregate([
  {
    $match: {}
  },
  {
    $group: {
      _id: "$_id",
      product: "$product",
      pasi: {
        "$sum": "$pasi"
      }
    }
  }
])

它给了我错误:该字段必须是一个累加器对象,当我在 _id 字段中键入 $product 时,它按我想要的方式工作,但不是这样,所以我很困惑谁能解释我如何聚合正在工作,我的代码有什么问题?

谢谢!

【问题讨论】:

  • 好几件事,1) 聚合是 mongoDB 原生的(它是一个管道,可以容纳每个阶段处理数据的阶段链,最后阶段是一种输出),尽管您可能已经读过它猫鼬没关系。 2) $match 确实像 .find() 一样工作,如果您没有任何要过滤的内容,则不需要它。 3)当你在'_id'上分组时,你的样本数据在哪里,你不能像这样对产品进行分组,因为它是数组的许多对象中的一个字段 - 你能否提供整个文档和所需的输出!!
  • 我唯一想知道的是为什么我必须在 _id 而不是任何其他字段上分组
  • 您可以对任何字段和字段组合进行分组,但不能像在数组中的字段上那样分组,如果您可以提供整个文档和所需的 o/p,我可以帮助您查询..

标签: mongodb aggregation-framework


【解决方案1】:

我希望这是您要查找的查询:

db.collection.aggregate( [{ 
$unwind: {  path: "$test"} }, {
$group: {  "_id": "$test.product",  
"pasi": { $sum: "$test.pasi"  }} }] )

【讨论】:

    猜你喜欢
    • 2019-06-23
    • 1970-01-01
    • 2017-10-17
    • 2019-07-16
    • 1970-01-01
    • 2019-09-20
    • 2015-08-07
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多