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返回兩個數據
