错误:无法识别的运算符:meteor js中的$ nearSphere

时间:2017-08-18 07:33:44

标签: meteor iron-router

我在流星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" }


                    );

如果有人有想法,请帮助。

2 个答案:

答案 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]
        }
      }
    }
  }
);

尝试一下,让我知道它是否有效。