它看起來像mongodb提供了兩個類似的功能用於地理空間查詢 - $near
和$geoNear
。根據mongo文檔mongodb geo附近與
geoNear命令提供了$ near操作符的替代方法。在 除了$ near的功能之外,geoNear會返回附加的 診斷信息。
看起來像geoNear
提供了near
功能的超集。例如,near
似乎只返回最接近的100個文檔,而geoNear
可讓您指定最大值。是否有理由使用near
而不是geoNear
?比另一個更有效率嗎?
它看起來像mongodb提供了兩個類似的功能用於地理空間查詢 - $near
和$geoNear
。根據mongo文檔mongodb geo附近與
geoNear命令提供了$ near操作符的替代方法。在 除了$ near的功能之外,geoNear會返回附加的 診斷信息。
看起來像geoNear
提供了near
功能的超集。例如,near
似乎只返回最接近的100個文檔,而geoNear
可讓您指定最大值。是否有理由使用near
而不是geoNear
?比另一個更有效率嗎?
兩者的效率應該相同。
geoNear
的主要限制是作爲一個命令,它可以返回結果集到最大文檔大小,因爲所有匹配的文檔都在單個結果文檔中返回。它還要求將距離字段添加到每個結果文檔中,根據您的使用情況,這可能是也可能不是問題。
$near
是一個查詢操作符,因此結果可能大於單個文檔(它們仍然在單個響應中返回,但不是單個文檔)。您還可以通過查詢的限制()設置文檔的最大數量。
我傾向於建議用戶堅持使用$near
,除非他們需要使用geonear
命令的diagnostics
(例如距離或位置匹配)。
的100個文件與GeoNear限制是默認行爲,但你可以設置NUM領域MongoDB的文檔(http://docs.mongodb.org/manual/reference/command/geoNear/)
默認設置爲100,但你可以設置更多的描述。不幸的是跳過參數丟失的那一刻 (見https://jira.mongodb.org/browse/SERVER-3925)
我以爲附近也默認爲100,但似乎並非如此 – 2013-03-21 04:24:15
這些是主要的區別: -
$ geoNear也給你距離的點,而是$附近命令沒有。
$ geoNear命令要求集合至多隻有一個2d索引和/或只有一個2dsphere索引,而諸如$ near和$ geoWithin的地理空間查詢運算符允許集合具有多個地理空間索引。 這是因爲在$ geoNear命令中沒有選項來指定您要搜索的字段,在$ near命令中您可以指定字段名稱。
感謝您的澄清。有一點不清楚的是,文檔近乎說它返回了100個文檔,但在我用Mongo 2.4進行測試時,似乎並不是這樣。它似乎返回所有文件,除非使用限制。你知道這個行爲應該是什麼嗎? – 2013-03-21 03:39:02
簡短回答:不,我不知道預期的2.4行爲是什麼。根據這個Jira票(https://jira.mongodb。org/browse/SERVER-5236),他們仍然沒有修復$ near查詢中的「漸進」結果,所以它會在某個時候停止。你可能會看到查詢只是在第一批中返回儘可能多的結果,但最終該批次的大小應該用盡。搶。 – 2013-03-21 03:54:35
至少它似乎不限於100,我認爲是這種情況。謝謝您的幫助。 – 2013-03-21 04:03:08