/*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"}
组织成员架构
{ "dob" : "1989-01-13",
"firstName" : "Sandeep",
"mappings" : [ { "programId" : "5496d0cd0cf2abd6b103b1a6", "centerId" : "5496d0a50cf2abd6b103b1a2"}]
}
MongoDB中的查找与foriegn键_id不进行比较
最佳答案
如果您的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选项,这就是为什么没有得到结果的原因。
希望能帮助到你!