Mongodb 聚合检查数组中的字段值出现了多少次?

Mongoldb aggregation check how many times a field value in an array comes up?

我有一组文件看起来像这样

{
 _id : 21353456,
product : "xy",
text : "asdf",
reviews : [
{
     username : "User1",
     userID: 12
     text : "hi",
     },
     {
     username : "User2",
     userID: 123
     text : "hi1",
     }
    ]
}

用户可以对不同的产品进行多次评论,我想检索至少进行了 3 次评论的所有用户。我想按字母顺序查看评论数、评论者姓名和 id。 我试过这段代码,但它不起作用

db.reviews.aggregate([{ 
  $group:{ 
    "_id": "$userID", "$userName","$text" 
    "numRev":{$numRev:{}}}}, {$match:{"numRev":{$gte: 3}}}, {$sort: {"reviewerName" : 1}}]) 

也许是这样的:

db.collection.aggregate([
{
  $unwind: "$reviews"
},
{
  $group: {
    _id: "$reviews.username",
    userID: {
      $last: "$reviews.userID"
    },
    reviewsNum: {
      $sum: 1
    }
  }
 },
 {
   $match: {
     reviewsNum: {
       $gte: 3
     }
   }
  },
  {
    $sort: {
      _id: 1
   }
  }
])

解释:

  1. 展开评论数组
  2. 按用户名分组,这样您就可以获得每个用户的评论数
  3. 仅匹配那些评论 >=3
  4. 按_id->用户名排序。

playground