首页 > 解决方案 > 有没有办法为此查询使用聚合管道方法

问题描述

我有一个包含超过 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

标签: mongodbmongodb-queryaggregation-framework

解决方案


我猜你需要运行这个聚合:

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"
    }
  }
])

Mongo游乐场


推荐阅读