0
我有两个集合:城市和国家。在城市我有一个字段country
,这是对国家集合的引用。查找参考字段
所以,我试图找到为:
db.city.find({ country.name: "USA" })
但这回空数组。如果我使用find而不是表达式,那么这将返回所有结果,也与“USA”一起返回。
我有两个集合:城市和国家。在城市我有一个字段country
,这是对国家集合的引用。查找参考字段
所以,我试图找到为:
db.city.find({ country.name: "USA" })
但这回空数组。如果我使用find而不是表达式,那么这将返回所有结果,也与“USA”一起返回。
假设您通过城市收藏中的ID引用了该国家,我认为您必须递归执行此操作。这可能是一个可能的解决方案:
db.country.find({ name: "USA" }, function(err, country) {
db.city.find({ country: country.id }, function(err, cities) {
// do something with the data...
});
});
考虑使用$lookup
操作者在聚合框架,其执行左外连接到另一个集合中的相同的数据库从“接合”收集处理中的文档进行过滤:
db.city.aggregate([
{
"$lookup": {
"from": "country",
"localField": "country",
"foreignField": "_id", // <-- reference field from country collection
"as": "resultingArray"
}
},
{ "$match": { "resultingArray.name": "USA" } }
])
请发布您的contry和city collection的数据结构 – felix