方案
我必须在名为大学和学生的2个集合上执行联接。我正在使用 MongoDB 3.4 。在这里,大学有一个名为studentId
的字段,该字段引用学生集合的_id
。
问题是,studentId
已经以字符串形式存储,而_id
是ObjectId。
studentId的例子:" 5910193d4c00000a01c2c615"
_id的例子:ObjectId(" 59a931696d00007c0962e24a")
所以,当我尝试关注加入查询时:
db.college.aggregate(
{
$lookup: {
from: "student",
localField: "studentId",
foreignField: "_id",
as: "Related"
}
})
它不起作用,因为 localField studentId
和 foreignField _id
的类型不同。那么,是否有某种方式studentId
被转换/与_id
进行比较,以便可以执行连接操作?
答案 0 :(得分:0)
打算这样做:
college(studentId) --- > student (_id)
string ----> ObjectId
we need to convert to ObjectId
db.college.aggregate([
{
"$addFields": {
"newStudentId" : { "$toObjectId": "$studentId" }
}
},{
$lookup: {
from: "student",
localField: "newStudentId",
foreignField: "_id",
as: "Related"
}
}])
答案 1 :(得分:0)
如果已升级到mongodb 4.0。他们添加了通过"_id.str"
将对象ID转换为字符串的功能。
因此,您的整体查询可能就像
db.college.aggregate(
{
$lookup: {
from: "student",
localField: "studentId",
foreignField: "_id.str",
as: "Related"
}
})
这应该很好。