如何获取平均星级值(原生mongodb & express)

How to get average star rating value (native mongodb & express)

使用 Express,我在 MongoDb breakfast-tacos 中有一个集合,其中包含一个名为 rating: 的字段。正在尝试计算 rating 字段的平均值,即不大于 5 的数字。正在尝试 aggregate 但一直得到 TypeError: db.collection(...).aggregate(...).then is not a function。聚合 pipeline/mongo 的新手,谁能举个例子说明如何使用它来正确获取原生 mongodb(不是猫鼬)的平均值并给出解释?

我的代码:

    app.get('/breakfast-rating', (req, res) => {
        db.collection('breakfast-tacos').aggregate([{$group: { "_id": "$ObjectId"}, $avg: {"rating":"$rating" }}])
        .then(results => {
            res.send({ rating: results });
        })
        .catch(error => console.error(error))
    });

如果您只是想确定所有 rating 字段的平均值,您需要像这样简单的东西:

db.collection.aggregate([
  {
    $group: {
      _id: "avg",
      avgrating: {
        $avg: "$rating"
      }
    }
  }
])

所以你的代码应该是这样的:

    app.get('/breakfast-rating', (req, res) => {
        db.collection('breakfast-tacos').aggregate([
        {
          $group: {
            _id: "avg",
            avgrating: {
              $avg: "$rating"
            }
          }
        }
      ])
        .then(results => {
            res.send({ rating: results[0].avgrating });
        })
        .catch(error => console.error(error))
    });

Mongo 游乐场:https://mongoplayground.net/p/7zLr3E6FoLh