我在流星js中有简单的代码,可以在10公里以内的车库附近找到查询在我的mongodb数据库中工作正常如果在robomongo中手动运行它工作正常但是当我在我的路线中运行它会抛出错误。像这样。
Error: Unrecognized operator: $nearSphere in meteor jsi
我看到一些博客他们说你需要为此调用服务器端方法。所以我使用下面的代码来调用服务器端路由。
Router.route('/search/:name',
{name:'searchlist',
data:function(){
var searchedParams = this.params.name.split('-');
var lat = searchedParams.pop();
var lng = searchedParams.pop(1);
return {searchValue: Centers.find({ coordinates: { $nearSphere: { $geometry: { type: "Point", coordinates: [lng,lat] }, $maxDistance: 10000 } } })}
}
}, { where: "server" }
);
如果有人有想法,请帮助。
答案 0 :(得分:0)
您正在混合客户端和服务器端路由的定义。
服务器端路由应该如下所示:
Router.route('/search/:name', function(...){...}, { where: 'server' });
客户端路由可能如下所示:
Router.route('/search/:name, { ... });
因此,您的路线实际上是客户端路线,而且minimongo不支持$nearSphere
运营商,如下所示:https://github.com/meteor/meteor/blob/devel/packages/minimongo/NOTES
答案 1 :(得分:0)
首先,看看Styx的答案,并通过消除这一部分使路线成为客户路线:
', { where: "server" }'
现在路由器可供客户端使用,让我们通过将运算符更改为$ near来修复$ nearSphere问题。使用以下代码:
Centers.find(
{
geoloc: {
$near: {
$geometry: {
type: "Point",
coordinates: [lng, lat]
}
}
}
}
);
尝试一下,让我知道它是否有效。