【问题标题】:2dsphere index query returns all documents2dsphere 索引查询返回所有文档
【发布时间】:2014-07-10 07:13:14
【问题描述】:

我在 Mac OS X 上使用 MongoDB 2.6.1

我有一个locations 的集合,其中包含一个有效的GeoJSON 字段:

db.locations.findOne({}, {"location": 1})
{
1"_id" : ObjectId("534fd2b6b13e51768cd0e9c8"),
"location" : {
    "type" : "Point",
    "coordinates" : [
        41.311,
        56.3526
    ]
}
}

我的数据库中有2dsphere 索引:

db.locations.getIndexes()
[   
{
    "v" : 1,
    "key" : {
        "location" : "2dsphere"
    },
    "ns" : "insta_locations.locations",
    "name" : "location_2dsphere"
},
...
]

但是当我在没有提示的情况下查询位置时,我得到一个错误:

db.locations.find({
    location: {
        $near: {
            $geometry: {
                type: "Point",
                coordinates: [41.311, 56.35]
            },
            $maxDistance: 1
        }
    }
})

产生:

错误:{ "$err" : "找不到特殊索引: 2d for: { location: { $near: { $geometry: { type: \"Point\", 坐标: [ 41.311, 56.35 ] }, $maxDistance: 1.0 } } }", “代码”:13038 }

另一方面,它返回整个集合的提示:

db.locations.find({
    location: {
        $near: {
            $geometry: {
                type: "Point",
                coordinates: [41.311, 56.35]
            }, 
            $maxDistance: 1
        }
    }
}).hint('location_2dsphere').length()

5138

有谁知道我缺少什么才能使其正常工作?

更新

> version()
2.6.1
> db.version()
2.2.2

【问题讨论】:

  • 你能在你的 mongo shell 中运行 version() 和 db.version() 并将输出添加到问题中吗?
  • 看来是这个原因。如何升级数据库本身?

标签: mongodb 2dsphere


【解决方案1】:

您正在运行 2.6.1 版的 mongo shell,但仍然有 2.2.2 版的 mongod 版本。当您一直在使用自制软件、macports 或两者的组合时,这可能发生在 Mac OS X 安装上。基本上,您路径中的第一个 mongod 不是最新版本。为了纠正我会尝试以下方法:

  1. 通过运行“which mongo”和“哪个 mongod”。
  2. 通过运行“echo $PATH”检查您的路径
  3. 找到正确的 mongod 文件。
  4. 更改配置文件中的路径以在正确的目录中搜索 首先是 mongod。

或者,您可以在启动 mongodb 时使用正确 mongod 的完整路径。

或者,您可以直接从 mongodb 重新下载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多