0

我在 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:{位置:{$near:{$geometry:{类型:\“点\”,坐标:[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
4

1 回答 1

2

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

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

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

或者,您可以直接从 mongodb 再次下载它。

于 2014-05-21T16:09:02.013 回答