Есть ли способ использовать метод совокупного конвейера для этого запроса - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть база данных из более чем 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 голосов
/ 21 февраля 2020

Полагаю, вам нужно запустить эту агрегацию:

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

...