Это вопрос, который попросил меня написать простой агрегированный запрос для отображения данных, я немного запутался. Не могли бы вы помочь мне взглянуть на этот код?
Как я могу запросить данные у:
{
"_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);
}
});