我正在尝试使用Mongoose聚合管道同时查询我的User
集合和Company
集合。
具体来说,我尝试返回所有users
并返回用户关联的companyName
。每个用户都有companyId
个属性
映射到company
_id
字段。以下是我的示例user
和company
文档:
User:
{
_id: ObjectId("5b12ef5ba07ce1f8b212f07b"),
companyId: "12345"
first: "John",
last: "Doe",
}
Company:
{
_id: ObjectId("12345"),
companyName: "UPS"
}
这是我的查询代码:
User.aggregate([{
$match: {}
},
{
$lookup: {
localField: "companyId",
from: "company",
foreignField: "_id",
as: "companyInfo"
}
},
{
$unwind: "$companyInfo"
},
{
$project: {
first: 1,
last: 1,
"companyInfo.companyName": 1,
}
}
], (err, users) => {
console.log(users) // returns []
});
我认为原因是companyId
被存储为我的User
集合中的字符串,但它是objectId
集合中的company
。
谁能确认一下?如果是问题,我不确定如何解决它...有人可以帮忙吗?提前谢谢!
答案 0 :(得分:0)
你的假设是正确的。
执行$lookup
时,本地字段和远程字段必须属于同一类型。
afaik查找时无法进行转换。
这是相关问题:
https://jira.mongodb.org/browse/SERVER-22781
版本3.7.3已实现
目前您可能想要更改数据类型