2014-02-24 66 views
0

對於我的mongo數據,我有以下結構,並試圖獲得從一個郵政編碼到另一個郵政編碼的距離。所以我有98341的zip1 98345和zip2,我怎樣才能獲得里程數?如果有更好的方法來構建這些數據,請告訴我(以及獲取里程的查詢)。謝謝!Mongo搜索找到單個文檔後的子文檔

{ "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 }, ... 
] 
}, .... 

回答

0

$unwind應該可以幫到這裏。

請測試一下。

db.zipcodes.aggregate(
    { $unwind : "$zips"}, 
    { $match : {"zip" :98345, "zips.to" : 98341}}, 
    { $project : {"zips.distances.miles" :1, _id:0}} 
); 
+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 } } ] } 

此說,具有郵政98345和有拉鍊陣列成員以匹配文檔:98341,回到我的拉鍊,只是從文件匹配的數組元素。

+0

這不會返回公里也。問題只有幾英里。你知道如何過濾km部分嗎? –

+0

這看起來似乎直接在mongodb中工作。我很抱歉,但我實際上使用的流星使用了mongo,但方式稍有不同。任何想法如何在流星中做到這一點? – timmyg13