/*first Table*/
DBCollection coll = db.getCollection("orgmembers");
/*second table*/
DBObject lookupFields = new BasicDBObject("from", "orgcenters");
lookupFields.put("localField", "mappings.centerId");
lookupFields.put("foreignField", "_id");
lookupFields.put("as", "collegeDetails");
DBObject lookup = new BasicDBObject("$lookup", lookupFields);
orgcenters架构
{"_id" : ObjectId("5496d0a50cf2abd6b103b1a2"), "code" : "CEN-DVG", "name" : "Davangere"}
orgmember schema
{ "dob" : "1989-01-13",
"firstName" : "Sandeep",
"mappings" : [ { "programId" : "5496d0cd0cf2abd6b103b1a6", "centerId" : "5496d0a50cf2abd6b103b1a2"}]
}
MongoDB中的查找与foriegn key _id
不相比
答案 0 :(得分:1)
如果你的localField是一个数组,你需要添加一个$ unwind阶段 你的管道。请参阅此页面上的示例。请参阅$lookup
在orgmember schema
中,我们将映射作为数组,因此在执行$ lookup之前必须将其解除。
如果我们将id作为字符串
,则此查询将起作用注意:请将id更改为String。
db.orgmember.aggregate([
{
$unwind : "$mappings"
},
{
$lookup:
{
from: "orgcenters",
localField: "mappings.centerId",
foreignField: "_id",
as: "collegeFields"
}
}])
在您的查询中,您错过了$ unwind选项,这就是为什么您没有得到结果。
希望它有帮助!