我在mongo shell中成功运行了以下查询:
db.runCommand({
geoNear : "stores",
near : { type : "Point", coordinates : [ -3.978, 50.777 ] },
spherical : true,
limit : 10
})
我正在尝试将其转换为我的节点服务as shown in the docs的mongoose查询。
Store.geoNear(
{ type : "Point", coordinates : [-3.978, 50.777]},
{ spherical : true, limit : 10 },
function (error, results, stats) {
//do stuff with results here
});
这会返回以下错误:
MongoError: exception: 'near' field must be point
我的Store
架构定义如下:
var storeSchema = new Schema({
// irrelevant fields...
locations : [
{
address : {
streetAddress : String,
postalCode : String
}
coords : {
type : [Number],
index : '2dsphere'
}
}
]
})
集合中只有一个2dsphere索引,正如我所提到的,它可以通过shell运行,而不是使用mongoose。
编辑:我尝试过的其他事情没有成功:
回到使用mongodb本机驱动程序(同样的错误,所以我怀疑它是mongodb而不是mongoose导致问题):
Store.collection.geoNear(
{ type : "Point", coordinates : [-3.978, 50.777]},
{ spherical : true, limit : 10 },
function (error, results, stats) {
//do stuff with results here
});
回归使用遗留坐标而不是地理位置(猫鼬和本地(相同的错误)):
Store.geoNear(
-3.978, 50.777,
{ spherical : true, limit : 10 },
function (error, results, stats) {
//do stuff with results here
});
使用来自mongoose的runCommand(这个错误不同,说Store.db.command
不是函数 - 从mongoose调用它的正确方法是可接受的答案):
Store.db.command({
geoNear : "stores",
near : { type : "Point", coordinates : [ -3.978, 50.777 ] },
spherical : true,
limit : 10
}, function(error, results){})
答案 0 :(得分:1)
最后设法通过mongodb本机驱动程序找出如何回退使用runCommand
:
Store.db.db.command({
geoNear : "stores",
near : { type : "Point", coordinates : [ -3.978, 50.777 ] },
spherical : true,
limit : 10
}, function(error, results){})