如何计算从汇总函数收到的响应总数

问题描述

我有一个mongo查询,

 try {
    const reviews = await Entity.aggregate([
      { $match: { cities: ObjectId(req.params.cityId),public: true } },{
        $lookup: {
          from: 'reviews',localField: '_id',foreignField: 'entityId',as: 'avgRating',},{
        $addFields: {
          avgRating: {
            $avg: {
              $map: {
                input: '$avgRating',in: '$$this.rating',{
        $project: {
          admin: 0,createdAt: 0,updatedAt: 0,]);
    res.send(reviews);
  } catch (e) {
    res.status(500).send();
  }

它工作正常,但是在addFields中我想再添加一个名为noOfReviews的字段,该字段将包含从$match$lookup获得的响应总数。 >

我尝试过

 totalCount: [
        { $group: { _id: null,count: { $sum: 1 } } },]

我将其放在addFields之后的avg里面,但这没用。

我该怎么办?

解决方法

您可以使用$size运算符来获取数组的计数,表示avgRating数组的续值,

  • 将其添加到$addFields
  {
    $addFields: {
      noOfReviews: {
        $size: "$avgRating"
      },avgRating: ... // skipping
    }
  },

Playground

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...