Javascript 异常:geoNear命令失败:errmsg:多个二维索引
我正在尝试按距离从集合中检索文档。我尝试使用Javascript 异常:geoNear命令失败:errmsg:多个二维索引,javascript,mongodb,mongoose,geometry,aggregation-framework,Javascript,Mongodb,Mongoose,Geometry,Aggregation Framework,我正在尝试按距离从集合中检索文档。我尝试使用$geoNear聚合,但我要么遇到错误(使用node.js和postman),要么返回0条记录 示例文档: { "_id" : ObjectId("5cc37692fe9fd54b3cd136c9"), "category" : "art", "description" : "an eastbound description for The soda event.", "geometry" : { "ty
$geoNear
聚合,但我要么遇到错误(使用node.js和postman),要么返回0条记录
示例文档:
{
"_id" : ObjectId("5cc37692fe9fd54b3cd136c9"),
"category" : "art",
"description" : "an eastbound description for The soda event.",
"geometry" : {
"type" : "Point",
"coordinates" : [
3.60178480057443,
6.46123057784917
]
}
"__v" : 0
}
.
.
型号:
const GeoSchema = new Schema({
type: {
type: String,
default: "Point"
},
coordinates: {
type: [Number],
index: "2dsphere"
}
}, { _id: false });
const EventSchema = new Schema({
category: String,
description: String,
geometry: GeoSchema,
});
查询
db.events.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [3.60178480057443, 6.46123057784917] },
distanceField: "dist",
maxDistance: 90000,
spherical: true
}
}
]);
运行上述查询将返回零结果、空数组(在postman上),有时会显示此错误:
{
"name": "MongoError",
"errmsg": "exception: geoNear command failed: { ok: 0.0, errmsg: \"more than one 2d index, not sure which to run geoNear on\" }",
"code": 16604,
"ok": 0
}
当显示此错误时,我运行
db.events.dropIndex
函数。我复制并粘贴了文档中使用的示例,效果很好。请问我如何使这个$geoNear函数工作。我已经为此挣扎了一整天 单个集合不能有多个2dsphere
索引,并且您已通过运行以下命令在多个字段上创建了2dsphere
索引
db.getCollection('test').createIndex({ "loc": "2dsphere" })
因此,删除其中一个索引,它将得到工作。您可以使用以下命令检查索引列表
db.getCollection('test').getIndexes()
更新:
{
"_id" : ObjectId("5cc37692fe9fd54b3cd136c9"),
"category" : "art",
"description" : "an eastbound description for The soda event.",
"geometry" : {
"type" : "Point",
"coordinates" : [
3.60178480057443,
6.46123057784917
]
}
"__v" : 0
}
.
.
若集合具有多个索引,则可以使用参数指定要在哪个字段上进行搜索