有没有一种方法可以使用聚合管道方法进行此查询

时间:2020-02-20 19:56:27

标签: mongodb mongodb-query aggregation-framework

我在一个在线商店中有一个针对商品的2000多个评论的数据库,我正在寻找所有写了至少5条评论的用户,并且我想列出他们的姓名,评论数量和评论者ID

我知道我必须使用聚合方法来执行此操作,但是在尝试时我没有运气,因为我还是mongodb的新手

我添加了一张图片,以显示数据库中某些数据的示例

一个进入数据库的示例如下;

{
    "_id": ObjectId("5d0b70f2d7367de7f5fa0ee1"),
    "SH_reviewerID": "A2G0LNLN79Q6HR",
    "SH_asin": "0000031887",
    "SH_reviewerName": "aj_18 \"Aj_18\"",
    "SH_helpful": [
      1,
      1
    ],
    "SH_reviewText": "This was a really good",
    "SH_overall": 4.0,
    "SH_summary": "Really Cute but rather short.",
    "SH_unixReviewTime": 1337990400,
    "SH_reviewTime": "05 26, 2012"
}

我已经尝试了好几天,但是没有运气,我认为我们需要使用$ match,$ group,$ project

1 个答案:

答案 0 :(得分:0)

我想您需要运行此聚合:

db.review.aggregate([
  {
    $group: {
      _id: "$SH_reviewerID",
      name: {
        $first: "$SH_reviewerName"
      },
      number: {
        $sum: 1
      }
    }
  },
  {
    $match: {
      number: {
        $gte: 5
      }
    }
  },
  //Optional - Order views descendant
  {
    $sort: {
      number: -1
    }
  },
  //Optional - Change field names
  {
    $project: {
      _id: 0,
      SH_reviewerID: "$_id",
      SH_reviewerName: "$name",
      SH_reviewerViews: "$number"
    }
  }
])

MongoPlayground