geoNear查詢可以看作是near查詢點進化版
geoNear查詢使用runCommand命令進行使用,常用使用如下:
db.runCommand({ geoNear:<collection>, near:[x,y], minDistance:(對2d索引無效,對2dsphere有效), maxDistance: num: ... })
geoNear的返回比near多了一些數據
> db.runCommand({geoNear:'location',near:[1,2],maxDistance:10,num:1}) { "results" : [ { "dis" : 0, "obj" : { "_id" : ObjectId("5b6b6fa872ff7510af7fc784"), "w" : [ 1, 2 ] } } ], "stats" : { "nscanned" : 3, "objectsLoaded" : 1, "avgDistance" : 0, "maxDistance" : 0, "time" : 3396 }, "ok" : 1 }
有3個,第一個是results,表明查詢到的數據,第二個是stats,指的是查詢的一些參數,第三個ok為1代表查詢成功。
其中stats,nscanned表明掃碼了哪些數據,time是花費的時間,maxDistance最大的距離,avgDistance平均距離,
results中,dis是distance的縮寫,代表查找到的數據的距離,離我們<1,2>的距離。obj是查找到的文檔,如果將num限制為2,
db.runCommand({geoNear:'location',near:[1,2],maxDistance:10,num:2}) { "results" : [ { "dis" : 0, "obj" : { "_id" : ObjectId("5b6b6fa872ff7510af7fc784"), "w" : [ 1, 2 ] } }, { "dis" : 1, "obj" : { "_id" : ObjectId("5b6b6fa572ff7510af7fc783"), "w" : [ 1, 1 ] } } ], "stats" : { "nscanned" : 32, "objectsLoaded" : 2, "avgDistance" : 0.5, "maxDistance" : 1, "time" : 3340 }, "ok" : 1 }
obj返回兩個數據