#node.js #mongodb #mongoose #backend #aggregation
#node.js #mongodb #мангуст #серверная часть #агрегация
Вопрос:
Я пытаюсь получить возврат данных с помощью агрегации, а также делаю разбивку на страницы. Я получаю результаты на странице 1, но после страницы 2 есть только пустой массив. Кто-нибудь может мне помочь? Я не уверен, почему я не получаю никаких результатов после того, как я получаю правильные результаты в $ match и $ skip
user.aggregate([
{
$facet: {
"total": [
{ $match: { deletedAt: { $exists: false }},},
{ $count: "count" }
],
"users": [
{ $match: { deletedAt: { $exists: false }}},
{ $lookup: {
from: "userdetails",
localField: "_id",
foreignField: "user_id",
as: "details"
}},
{
$group: {
_id: "$_id",
username: { "$first": "$username" },
email: { "$first": "$email"},
accessCode: { "$first": "$accessCode"},
employer: { "$first": "$employer" },
domain: { "$first": "$domain" },
createdAt: { "$first": "$createdAt" },
updatedAt: { "$first": "$updatedAt" },
details: {
"$addToSet": "$details"
}
}
}
,{ $sort: sort },
{ $limit: items },
{ $skip: skip }
]
}
}
]).collation({ locale: "en"}).exec(function(err, users) {
var total;
var usersRecord;
if (!users) {
total = 0;
usersRecord =[];
} else {
total = users[0].total[0] ? users[0].total[0].count : 0;
usersRecord = users[0].users
}
let pages = total > 0 ? Math.ceil(total / items) : 1;
res.status(200).json(
{
'total': total,
'page': Number(page),
'pages': pages,
'items': usersRecord
})
})
Комментарии:
1. ОБНОВЛЕНИЕ : вот фильтр
const items = parseInt(req.query['items-per-page']) || parseInt(config.pagination.limit); const page = parseInt(req.query['page']) || 1; const skip = parseInt(page) * parseInt(items) - items; const sort = { updatedAt: - 1};
2. на самом деле
skip
должно быть раньшеlimit
, можете ли вы опубликовать некоторые данные3. боже, ты прав! Я не знал об этом. большое вам спасибо @varman
4. можете ли вы опубликовать это в поле ответа, чтобы я мог пометить его как решаемый?