我收藏有一個像下面的字段,存儲用戶簽入(地理座標)MongoDB的geoNear與獨特和排序的值
{
"_id" : ObjectId("5333c3063b15ea390b3c986a"),
"userID" : "5332cad33b15eaaf643c986a",
"timestamp" : ISODate("2014-03-27T06:19:50.129Z"),
"loc" : {
"type" : "Point",
"coordinates" : [
76.980286,
10.934041
]
}
}
{
"_id" : ObjectId("53353a0d3b15ea063a3c986a"),
"userID" : "533268983b15ea9f5a3c986c",
"timestamp" : ISODate("2014-03-28T08:59:57.907Z"),
"loc" : {
"type" : "Point",
"coordinates" : [
76.980019,
10.934072
]
}
}
{
"_id" : ObjectId("53353a5d3b15eacc393c986c"),
"userID" : "533268983b15ea9f5a3c986c",
"timestamp" : ISODate("2014-03-28T09:01:17.479Z"),
"loc" : {
"type" : "Point",
"coordinates" : [
76.980057,
10.933996
]
}
}
我使用geoNear來計算距離。 結果應該是最新的用戶簽到(地理座標),即某種基於時間戳以獲得最新的簽入,並基於用戶ID
我想下面的代碼,但明顯它不是幫助
db.runCommand(
{
"geoNear" : "locations",
"near" : [76.980286, 10.934041 ],
"num" : 100,
"spherical" : true,
"maxDistance" :1000,
"query" : {
"distinct" : { "userID" : true } ,
"sort" : { "timestamp" : -1 }
}
}
)
告訴我我錯了!
是否沒有**錯誤**給你一些指示? –
沒有錯誤,但結果是空的。如果您嘗試刪除**查詢**選項。然後結果顯示重複的用戶ID(s)。謝謝 – rajeshkumarprk
對於'runCommand'形式,這可能是正確的。但** distinct **和** sort **不是有效的查詢條件。也許你的意思是'uniqueDocs',而「GeoNear」的意思是返回「最接近的」,所以「排序」在這裏並不真正有效。您的查詢對象無法成爲查詢。請參閱[文檔](http://docs.mongodb.org/manual/reference/command/geoNear/) –