带Asnyc的MongoDB +猫鼬聚合

时间:2019-09-21 04:45:40

标签: mongodb express asynchronous promise mern

我的express文件中有以下路由,该路由采用从中间件函数传入的参数,并查询我的后端MongoDB数据库。但是由于某种原因,它只会返回一个空数组。

我想将Mongoose模型转换为允许我使用聚合函数转换为async / await以符合我其余代码的模型。它在线here

module.exports = {
    search: asyncWrapper(async(req, res, next) => { // Retrieve and return documents from the database.
        const { 
            filterTarget, 
            filter, 
            source, 
            minDate,
            maxDate, 
            skip, 
            limit,
            sortBy,
            sortOrder
        } = req.search;

        try {
            const mongoData = await Model.aggregate([
                {
                    $match: { 
                        date: {
                            $gt: minDate, // Filter out by time frame...
                            $lt: maxDate
                        }
                    }
                },
                {
                    $match: { 
                        [filterTarget]: filter // Match search query....
                    }
                },
                {
                    $set: {
                        [filterTarget]: { $toLower: `$${filterTarget}` } // Necessary to ensure that sort works properly...
                    }
                },
                {
                    $sort: {
                        [sortBy]: sortOrder // Sort by date...
                    }
                },
                {
                    $group: { 
                        _id: null,
                        data: { $push: "$$ROOT" }, // Push each document into the data array.
                        count: { $sum: 1 }
                    }
                },
                {
                    $project: {
                        _id: 0,
                        count: 1,
                        data: { 
                            $slice: ["$data", skip, limit]
                        },

                    }
                }
            ])

            return res.status(200).json({ data: mongoData.data || [], count: mongoData.count || 0 });

        } catch (err) {
            next(err);
        }
    })
};

由于某种原因,路由每次仅返回一个空数组。我已经对变量进行了两次和三次检查,这不是问题。

如何在异步等待路由中使用Mongoose.aggregate()函数?

0 个答案:

没有答案
相关问题