首页 > 解决方案 > 求和金额后在 MongoDB 中出现“将循环结构转换为 JSON”错误

问题描述

在我的 MongoDB 后端中,我正在运行count存在多少客户,然后将其保存在变量“totalCustomers”中以作为端点响应的一部分传递:

let totalCustomers = await db.collection('view_customer_data').find(search).count({ $sum: "customer._id" });

以上是我想计算实例时使用的,即在这种情况下,有多少客户。

我的问题是关于如何使用$sum来将数值相加并将该值与响应一起传递。我试过这个,但它会产生“将循环结构转换为 JSON”错误:

  let totalOpenBalance = await db.collection('view_customer_data').find({
    "_id": { $sum: "$openBalance" }
  });

我也试过这个:

  let totalOpenBalance = await db.collection('view_customer_data').aggregate({
    "_id": { $sum: "$openBalance" }
  });

... 和这个:

let totalOpenBalance = await db.collection('view_customer_data').aggregate({ $group: { _id: '_id', $sum: "$openBalance"  } });

...但得到了同样的错误。

这里的语法应该是什么样的?

这适用于看起来像这样的数据:

{ 
    "_id" : "44sd44444sdsd44444dsd44"), 
    }, 
    "customer" : {
        "_id" : "4th17d43561f0613be0a454f", 
        "name" : {
            "first" : "John", 
            "last" : "Smith"
        }
    }, 
    "openBalance" : 28, 
    "lastTransactionDate" : ISODate("2018-01-10T00:00:00.000+0000")
}

我返回结果的函数部分如下所示:

    // preceeeding code...
    db.collection('view_customer_data').find(search).skip(skip).limit(pagesize).forEach(function (doc) {
        counter ++; {
      console.log('doc: ', doc);
      docs.push(doc);
    }

    }, function (err) {
        if (err) {
            if (!ioOnly) {
                return next(err);
            } else {
                return res(err);
            }
        }
        if (ioOnly) {
            res({ sessionId: sessID, count: count, data: docs, totalCustomers: totalCustomers, totalOpenBalance: totalOpenBalance });
        }
        else {
            res.send({ count: count, data: docs, totalCustomers: totalCustomers, totalOpenBalance: totalOpenBalance });
        }
    });
}

标签: javascriptmongodbaggregation-framework

解决方案


推荐阅读