/*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选项,这就是为什么没有得到结果的原因。

希望能帮助到你!

09-27 06:15