Mongo在找到单个文档后搜索子文档

时间:2014-02-24 23:38:55

标签: mongodb meteor

我的mongo数据有以下结构,我试图从一个邮政编码到另一个邮政编码。所以我有zip1 98345和邮编2的98341,我怎样才能获得里程?如果有更好的方法来构建这些数据,请告诉我(以及获取里程的查询)。谢谢!

{ "zip" : 98345, 
"zips" : [ 
{   "to" : 98453,   "distances" : {     "miles" : 1,    "km" : 0 } },   
{   "to" : 98341,   "distances" : {     "miles" : 3.9,  "km" : 4.7 }, ...
]
},
{ "zip" : 98323, 
"zips" : [ 
{   "to" : 98395,   "distances" : {     "miles" : 1,    "km" : 0 } },   
{   "to" : 98373,   "distances" : {     "miles" : 3.9,  "km" : 4.7 }, ...
]
}, ....

2 个答案:

答案 0 :(得分:1)

通过简单的查找,有几种方法可以做到这一点。这是其中之一:

db.zips.find( { "zip":98345, "zips.to":98341},
              {"zip":1, "zips.$.distances":1,_id:0})
{ "zip" : 98345, "zips" : [ { "to" : 98341, "distances" : { "miles" : 3.9, "km" : 4.7 } } ] }

这就是说,将具有zip 98345并具有zips阵列成员的文档与:98341匹配并返回给我zip并且只是该文档中匹配的数组元素。

答案 1 :(得分:0)

$unwind应该在这里提供帮助。

请测试一下。

db.zipcodes.aggregate(
  { $unwind : "$zips"},
  { $match : {"zip" :98345, "zips.to" : 98341}},
  { $project : {"zips.distances.miles" :1, _id:0}}
);