【问题标题】:MongoError: The $subtract accumulator is a unary operatorMongoError:$subtract 累加​​器是一元运算符
【发布时间】:2018-10-09 20:15:45
【问题描述】:

我似乎找不到任何解决此问题的方法。我就是不知道哪里出了问题。

我已经尝试过Mongo subtract in group aggregation,但没有希望。该帖子也未能进一步解释。

这是我的代码:

 var aggregateOptions;
  aggregateOptions = [{
    $match: {

    }
  },{
    $group: {
      _id: "$customerID",
      totalAmount: { $sum: "$amount" },
      totalpaidAmount: { $sum: "$paidAmount" },
      totalAmountDue: { $subtract: ["$totalAmount", "totalpaidAmount"] }
    }
  }];

  Sale.sales.get(Sale.Schema, aggregateOptions, (err, saleRecord) => {
    if (err) throw err;
    console.log(saleRecord);

    res.json({
      pageTitle: "Customer List",
      currentUser: req.user,
      saleRecord: saleRecord,
    });
  });

每次查询都会提示MongoError: The $subtract accumulator is a unary operator。

【问题讨论】:

  • 算术运算符不能在group 阶段使用。相反,有一个额外的project 阶段或addFields 阶段,通过subtract 操作添加新字段。

标签: mongodb mongoose


【解决方案1】:

将您的查询部分更改为此:

aggregateOptions = [
  {
     $match: {

     }
  },
  {
     $group: {
       _id: "$customerID",
       totalAmount: { $sum: "$amount" },
       totalpaidAmount: { $sum: "$paidAmount" }
     }
  },
  {
     $addFields:{
       totalAmountDue: { $subtract: ["$totalAmount", "$totalpaidAmount"] }
     }
  }
];

【讨论】:

  • +Raj 先生存在格式问题,但它可以工作。一个特殊的错误。我真的不明白为什么小组赛不能做算术运算。
  • 这篇文章只是我对你的帖子的评论的扩展版本。 $subtract 不是跟踪 field 状态的累加器运算符。只有accumulator 运算符可以与group 阶段一起使用。 docs.mongodb.com/manual/reference/operator/aggregation-group.
  • @RahulRaj 说$group的字段不能引用同阶段新声明的其他字段对吗?
猜你喜欢
  • 2019-03-28
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 2015-10-15
  • 2020-10-03
  • 1970-01-01
  • 2022-12-15
相关资源
最近更新 更多