MongoDB: агрегация не возвращает записи после страницы 1

#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. можете ли вы опубликовать это в поле ответа, чтобы я мог пометить его как решаемый?