mongodb - 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);
});
});
解决方案
request.params.id
以字符串形式出现(假设您不使用任何特定的中间件来重新转换它)。
您所要做的就是强制转换为一个ObjectId
类型。像这样:
var ObjectID = require('mongodb').ObjectID
{
$match: {
_id: new ObjectId(request.params.id)
}
}
- 还有一个性能提示,将
$match
舞台移动到舞台之前,$lookup
这样您就不会对所有冗余文档执行查找(这很昂贵)。
推荐阅读
- java - 我不能在 Java 11 中使用 @PostConstruct 和 @PostDestroy
- php - 无法使用 php 删除 memcache?但是可以用telnet
- angular - 使用 node 和 @angular/cli 构建的应用程序可以离线运行吗?
- jquery - html 数据属性的 attr() 返回 undefined
- sql-server - SQL Server 如何获取货币类型的小数位数?
- android - android Room获取blob图像并显示
- vba - 如何将变量分配给具有部分已知名称的 Excel 工作表
- graph-theory - 如何证明关系属性适用于该关系的传递闭包?
- ios - 如何使用 CAShapLayer 和自动布局约束绘制圆形进度条
- php - 在 laravel 中插入数据并登录