我有两个集合
用户
{ "_id" : ObjectId("584aac38686860d502929b8b"), "name" : "John" }
职位
{
"_id" : ObjectId("584aaca6686860d502929b8d"),
"role" : "Admin",
"userId" : "584aac38686860d502929b8b"
}
我想根据role集合中的userId(在user集合中的_id)来连接这些集合。
我尝试了以下查询:
db.role.aggregate({
"$lookup": {
"from": "user",
"localField": "userId",
"foreignField": "_id",
"as": "output"
}
})
只要我将userId存储为ObjectId,就能得到预期的结果。但是当我的userId是字符串时,就没有结果了。 Ps: 我尝试过
foreignField: '_id'.valueOf()
和
foreignField: '_id'.toString()
。但是没有办法根据ObjectId字符串字段进行匹配/连接。
任何帮助将不胜感激。
$toObjectId
的情况出现了错误。Gary Wild的回答修复了它。 - teuber789