2016-10-20 89 views
0

我有两个集合:城市和国家。在城市我有一个字段country,这是对国家集合的引用。查找参考字段

所以,我试图找到为:

db.city.find({ country.name: "USA" }) 

但这回空数组。如果我使用find而不是表达式,那么这将返回所有结果,也与“USA”一起返回。

+0

请发布您的contry和city collection的数据结构 – felix

回答

0

假设您通过城市收藏中的ID引用了该国家,我认为您必须递归执行此操作。这可能是一个可能的解决方案:

db.country.find({ name: "USA" }, function(err, country) { 
    db.city.find({ country: country.id }, function(err, cities) { 
    // do something with the data... 
    }); 
}); 
0

考虑使用$lookup操作者在聚合框架,其执行左外连接到另一个集合中的相同的数据库从“接合”收集处理中的文档进行过滤:

db.city.aggregate([ 
    { 
     "$lookup": { 
      "from": "country", 
      "localField": "country", 
      "foreignField": "_id", // <-- reference field from country collection 
      "as": "resultingArray" 
     } 
    }, 
    { "$match": { "resultingArray.name": "USA" } } 
])