首页 > 解决方案 > mongodb 中 $match 和 request.params.id 的问题

问题描述

我正在尝试通过_id从 Mongodb 中的集合中获取一个部门,$lookup$match通过从请求参数中_id接收来获取部门。_id

但是,我得到一个空数组作为我的结果,当我更改request.params.id静态值(如 2 或 1)时,它返回的数据没有问题.. 有什么解决方案吗?

    DepartmentRouter.get("/departments/:id", (request, response) => {
    departmentSchema.aggregate([
        {
            $lookup: {
                from: "students",
                localField: "_id",
                foreignField: "Department",
                as: "studentsObject"
            }
        },
        {
            $match: {
                _id: request.params.id
            }
        }
    ]).then(data => {
        response.send(data);
    }).catch(error => {
        response.send(error);
    });
});

标签: mongodbaggregate

解决方案


request.params.id以字符串形式出现(假设您不使用任何特定的中间件来重新转换它)。

您所要做的就是强制转换为一个ObjectId类型。像这样:

var ObjectID = require('mongodb').ObjectID

{
     $match: {
         _id: new ObjectId(request.params.id)
     }
}
  • 还有一个性能提示,将$match舞台移动到舞台之前,$lookup这样您就不会对所有冗余文档执行查找(这很昂贵)。

推荐阅读