2013-08-25 33 views
0
Event Schema: 
    Name:String, 
    Description: String, 
    Location:[ 
      ll:[long,lat] 
      type: String (source,destination) 
    ], 
    CreatedDate:Date, 
    UpdatedDate:Date, 

例子:

{ 
    Name : 'Test1', 
    Description : 'Test1', 
    Location:[{ 
     ll:[{long:-118.2436849,lat:34.0522342}], 
     type: 'source' 
    },{ 
     ll:[{long:2,lat:4}], 
     type: 'destination' 
    }] 
} 

我有具有與上述相同結構的7個文件。

當我做一個查詢:

db.events.count({'location.ll' : {$near:[-118.2436849,34.0522342]},'location.type':'source'}); 

我得到14計數回。我理應得到7條記錄,但我得到了14條記錄。我不確定我做錯了什麼。

我已經索引字段「location.ll」爲「2D」

請讓我知道我在做什麼錯?

感謝您的幫助

回答

2

這是一個documented「功能」,您可以通過以下建議避開它:

對於具有多個座標值的文檔,查詢可能會返回相同的如果多個索引座標對滿足查詢約束,則多次記錄文檔。使用uniqueDocs參數geoNear或帶$ geoWithin的$ uniqueDocs操作符。

+0

謝謝菲利克斯的信息。我剛剛找到了我的查詢的答案。再次感謝你。雖然,我還有一個問題要問:是否可以在一個位置和相關類型上進行查詢。 db.events.findOne({'location.ll':{$ near:[2,4],$ uniqueDocs:true,$ maxDistance:1/3959},'location.type':'d'})。理想情況下,這應該不會給我任何結果,因爲我正在查詢半徑1英里[2,4]附近的所有點。但它給了我一個結果 – Anup

+0

不確定'$ near',因爲我在實踐中使用'geoNear'指定了'query'。也許你可以試試:) –

+0

還有一點需要注意,我猜你需要'$ elemMatch',但根據[這個bug報告](https://jira.mongodb。 org/browse/SERVER-7581) –