MongoDB中的查找与foriegn key _id不相比

时间:2016-08-31 06:51:09

标签: java mongodb

/*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

不相比

1 个答案:

答案 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选项,这就是为什么您没有得到结果。

希望它有帮助!