2014-09-24 122 views
0

我用find()打印出一些記錄,然後基於幾乎完全基於其中的一個構建了一個$ near查詢。該查詢不返回任何結果。這很簡單,但完全錯誤。這裏發生了什麼?

> db.locations.find() 
{ "_id" : ObjectId("542264d7050ff67199103c94"), "loc" : "13", "fbid" : "13", "lnglat" : { "geo" : [ -122.58456, 37.918721000000005 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c8f"), "loc" : "8", "fbid" : "8", "lnglat" : { "geo" : [ -122.53456, 37.868721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c8a"), "loc" : "3", "fbid" : "3", "lnglat" : { "geo" : [ -122.48456, 37.818721000000004 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103cad"), "loc" : "38", "fbid" : "38", "lnglat" : { "geo" : [ -122.83456, 38.168721000000005 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c99"), "loc" : "18", "fbid" : "18", "lnglat" : { "geo" : [ -122.63456000000001, 37.968721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103ca8"), "loc" : "33", "fbid" : "33", "lnglat" : { "geo" : [ -122.78456, 38.118721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103ca3"), "loc" : "28", "fbid" : "28", "lnglat" : { "geo" : [ -122.73456, 38.068721000000004 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103cb2"), "loc" : "43", "fbid" : "43", "lnglat" : { "geo" : [ -122.88456000000001, 38.218721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c9e"), "loc" : "23", "fbid" : "23", "lnglat" : { "geo" : [ -122.68456, 38.018721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103cb7"), "loc" : "48", "fbid" : "48", "lnglat" : { "geo" : [ -122.93456, 38.268721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c90"), "loc" : "9", "fbid" : "9", "lnglat" : { "geo" : [ -122.54456, 37.878721000000006 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c8b"), "loc" : "4", "fbid" : "4", "lnglat" : { "geo" : [ -122.49456, 37.828721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c95"), "loc" : "14", "fbid" : "14", "lnglat" : { "geo" : [ -122.59456, 37.928721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c9a"), "loc" : "19", "fbid" : "19", "lnglat" : { "geo" : [ -122.64456, 37.978721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103c9f"), "loc" : "24", "fbid" : "24", "lnglat" : { "geo" : [ -122.69456, 38.028721000000004 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103ca4"), "loc" : "29", "fbid" : "29", "lnglat" : { "geo" : [ -122.74456, 38.078721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103ca9"), "loc" : "34", "fbid" : "34", "lnglat" : { "geo" : [ -122.79456, 38.128721000000006 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103cae"), "loc" : "39", "fbid" : "39", "lnglat" : { "geo" : [ -122.84456, 38.178721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103cb3"), "loc" : "44", "fbid" : "44", "lnglat" : { "geo" : [ -122.89456, 38.228721 ] }, "__v" : 0 } 
{ "_id" : ObjectId("542264d7050ff67199103cb8"), "loc" : "49", "fbid" : "49", "lnglat" : { "geo" : [ -122.94456, 38.278721000000004 ] }, "__v" : 0 } 
Type "it" for more 
> db.locations.getIndexes() 
[ 
     { 
       "v" : 1, 
       "key" : { 
         "_id" : 1 
       }, 
       "name" : "_id_", 
       "ns" : "mydb.locations" 
     }, 
     { 
       "v" : 1, 
       "key" : { 
         "lnglat.geo" : "2dsphere" 
       }, 
       "name" : "lnglat.geo_2dsphere", 
       "ns" : "mydb.locations", 
       "background" : true, 
       "safe" : null, 
       "2dsphereIndexVersion" : 2 
     }, 
     { 
       "v" : 1, 
       "unique" : true, 
       "key" : { 
         "loc" : 1 
       }, 
       "name" : "loc_1", 
       "ns" : "mydb.locations", 
       "background" : true, 
       "safe" : null 
     } 
] 
> db.locations.count({ lnglat: { geo: { $near: { $geometry: { type: "Point", coordinates: [ 122.83456, 38.16872100 ] }, maxDistance: 5000 } } } }) 
0 

當我從lnglat: { geo: {修改字段,蒙戈抱怨說,它無法找到其上運行查詢的索引。

回答

1

你的「簽名」是錯在你的座標和你「應該」在這裏,以防萬一你在將來改變這一子文檔應用點符號:

db.locations.count({ 
    "lnglat.geo": { 
     "$near": { 
      "$geometry": { 
       "type": "Point", 
       "coordinates": [ -122.83456, 38.16872100 ], 
      }, 
      "$maxDistance": 5000 
     } 
    } 
}); 

而且$maxDistance是錯誤地指定,因爲它需要前面的$

在此處包含的示例文檔中,距離計數爲2