2012-07-24 63 views
0

我使用mongo的「$ near」查詢,它按預期工作併爲我節省了大量時間。MongoDB geospacial查詢

現在我需要執行一些更復雜的事情。想象一下,我們有一個包含geospacial信息(沒有不尋常的:只是lat和lng)和時間的「checkins」(讓我們用四方符號)的集合。鑑於兩個人的簽入,我如何找到他們「彼此接近」的簽證?我的意思是,例如:「1/23/12你已經走了100米」

最簡單的解決方案是選擇第一個用戶的所有簽到,併爲每個第一個用戶簽入框架一側我用紅寶石)。但它是最有效的解決方案嗎? 你有更好的想法嗎?可能我需要某種特殊的索引?

最佳, 羅馬

+0

我認爲你應該在這裏使用map_reduce適當的用戶的所有簽入。首先,您應該按日期時間對用戶的簽到進行分組,然後查找簽入之間的最小距離。 – Hck 2012-07-24 08:44:34

+0

感謝您的快速響應!我會試一試 – 2012-07-24 09:06:15

回答

1

MongoDB的地理空間索引提供了兩種類型的查詢:$附近,$內。 $ near查詢返回數據庫中位於請求點的特定範圍內的所有點,而$ within查詢則列出數據庫中位於特定區域(框,圓或任意多邊形)內的所有點。

MongoDB目前不提供一個查詢,它將返回距離另一組點的任何成員的距離內的所有點,這就是你所期望的。

您可以設想使用user1的點數據來構建描述「感興趣區域」的多邊形,然後使用$ within查詢來查看該區域內是否有其他人簽入。如果您在位置&日期使用複合索引,則甚至可以將查詢限制在特定日期內位於該區域內的人員。

參考文獻: