首页 > 解决方案 > MongoDB + Mongoose 聚合 w/ Asnyc

问题描述

我的 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() 函数?

标签: mongodbexpressasynchronouspromisemern

解决方案


推荐阅读