【发布时间】:2018-11-16 18:12:42
【问题描述】:
我正在尝试使用 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 集合中的一个。
任何人都可以确认吗?如果这是问题,我不知道如何解决它......有人可以帮忙吗?提前致谢!
【问题讨论】:
-
问题确实是不同的类型。正如referenced answer 所述,解决方案是“修复您的数据”,而不是像建议的那样在运行时使用新方法进行转换。该答案实际上准确地说明了为什么运行时强制转换不是答案以及为什么您确实需要更正您的数据。它还展示了如何以有效方式转换数据的示例。
标签: mongodb mongoose aggregation-framework