Совокупный запрос в мангусте - PullRequest
1 голос
/ 12 февраля 2020

Это вопрос, который попросил меня написать простой агрегированный запрос для отображения данных, я немного запутался. Не могли бы вы помочь мне взглянуть на этот код?

Как я могу запросить данные у:

{
        "_id": "5af50e729ba1ae0056dbb436",
        "__v": 0,
        "asset_id": "CHMHCj-sqJdbPwDs_6Y4_Q",
        "asset_type": "youtube_channel",
        "created_at": "2018-05-11T03:30:58.487Z",
        "schema_version": 1,
        "stat": "posts_30d",
        "updated_at": "2018-05-11T03:30:58.487Z",
        "value": "0"
    },

до:

[
  {
    _id: '<channel_id>',
    subscribers: [
      {value: Number, date: Date},
      // most recent 10 records
    ],
    posts_30d: [
      {value: Number, date: Date},
      // most recent 10 records
    ]
  },
]

для channel_id - это asset_id, а posts_30d - это значение статистики. Значение stat будет либо «stat»: «posts_30d», либо «stat»: «подписчики». новые данные будут отображаться в соответствии с asset_id и значением stat.

Я пытался использовать unwind и project, но это не выглядит так же. Кроме того, я использую «Предел», чтобы ограничить количество постов, но результаты должны отображать по 10, а всего - 10.

db.Stats.aggregate([
    { $unwind: "$stat" },
    { $sort: { updated_at: -1 } },
    { $limit : 5 },
    {
      $project: {
        asset_id: 1,
        value: 1,
        updated_at: 1,
        stat: 1
      }
    },
    {
      $group: {
        _id: "$asset_id",
        sub: {
          $push: {
            value: "$value",
            date: "$updated_at"
          }
        }
      }
    }
  ]).exec(function(err, found) {
    // Log any errors if the server encounters one
    if (err) {
      console.log(err);
    }
    // Otherwise, send the result of this query to the browser
    else {
      res.json(found);
    }
  });
...