MongoDB / Mongoose使用聚合获取对象的数组属性的长度

时间:2019-12-27 02:51:27

标签: mongodb mongoose

 Problem.aggregate(
    [
      { $unwind: "$comments" },
      {
        $group: {
          _id: "$_id",
          size: { $size: "$comments" }
        }
      }
    ],
    function(err, results) {
      console.log(err);
      console.log(results);
    }
  );

我尝试将$ size与聚合一起使用,但出现此错误:

MongoError:未知的组运算符'$ size'。

我正在使用mongodb 3.6版。我只想获取注释属性的长度,该属性是一个数组。

以下是问题文档样本:

{
    "_id": {
        "$oid": "5e02a2184a6e7f4980f47e8f"
    },
    "author": {
        "id": {
            "$oid": "5e027a4badd90919304a9eb0"
        }
    },
    "description": "testd",
    "gender": 0,
    "dailyUpvotes": 2,
    "tags": [
        {
            "_id": {
                "$oid": "5e02a2184a6e7f4980f47e90"
            },
            "name": "test"
        }
    ],
    "title": "test",
    "upVotes": 2,
    "comments": [
        {
            "_id": {
                "$oid": "5e03124933c17d406471d6f9"
            },
            "id": {
                "$oid": "5e03124933c17d406471d6f8"
            }
        }
    ],
    "upVotesList": [
        {
            "_id": {
                "$oid": "5e045a07745eb94b584d27e1"
            },
            "userID": {
                "$oid": "5e045a00745eb94b584d27e0"
            }
        },
        {
            "_id": {
                "$oid": "5e02a26b3cbe4e3794555f42"
            },
            "userID": {
                "$oid": "5e027a4badd90919304a9eb0"
            }
        }
    ],
    "createdAt": {
        "$date": "2019-12-24T23:41:12.707Z"
    },
    "updatedAt": {
        "$date": "2019-12-26T06:58:15.080Z"
    },
    "__v": 2
}

代替获取的数组,我只想获取数组的长度。如果还有另一种不使用聚合的方式,那也可以::提前谢谢!

1 个答案:

答案 0 :(得分:1)

尝试这样的事情。

Problem.aggregate([
   {
      $project: {
         item: 1,
         numberOfResults: { $size: "$comments" }
      }
   }
] )

看看https://docs.mongodb.com/manual/reference/operator/aggregation/size/