【问题标题】:MongoDB $near query returns no resultsMongoDB $near 查询不返回结果
【发布时间】:2014-09-24 06:44:28
【问题描述】:

我使用 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: { 修改字段时,Mongo 抱怨它找不到运行查询的索引。

【问题讨论】:

    标签: mongodb indexing mongodb-query geospatial


    【解决方案1】:

    您的“签名”在您的坐标上是错误的,您“应该”在此处应用点符号,以防您将来更改此子文档:

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

    并且$maxDistance 指定不正确,因为它需要前面的$

    在此处包含的示例文档中,距离内的计数为2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多