MongoDB:根据2个集合查找字段的值

时间:2016-10-28 15:32:06

标签: mongodb nosql

我正在使用MongoDB,我有两个如下集合:

人:

{  
   "name":"Bob",
   "info":{  
      "birthplace":[  
         "Paris, France"
      ],
      "birthdate":[  
         "18 June 1961"
      ]
   }
}

城市:

{  
   name:"Paris",
   country:"FR",
   population:8022,
   location:{  
      longitude:42.46372,
      latitude:1.49129
   }
}

对于出生地众所周知的每个人,我想找到该城市的位置和人口。我查看了文档,发现我们可以使用$lookup进行汇总,如下所示:

Person.orders.aggregate([
    {
      $lookup:
        {
          from: "City",
          localField: "birthplace",
          foreignField: "name",
          as: "inventory_docs"
        }
   }
])

但问题是City.name的值包含在Person.birthplace中,所以它们无法匹配,任何想法?谢谢!

1 个答案:

答案 0 :(得分:0)

如果你首先放开“$ info.birthplace”,你的$ lookup会有效:

Person.orders.aggregate([{$unwind: "$info.birthplace"},
                         {$lookup: {from: "city",
                                    localField: "info.birthplace",
                                    foreignField: "name",
                                    as: "inventory_docs"}
                         }]);

并且“$ info.birthplace”必须与来自城市的“名称”完全匹配(现在它没有,“巴黎,法国”不等于“巴黎“)。

除此之外,还不清楚为什么个人文档中的“info.birthplace”“info.birthdate”是数组。它似乎毫无意义,因为一个人不能有一个以上的出生日期和地点。