【问题标题】:Meteorjs using $near on Client SideMeteorjs 在客户端使用 $near
【发布时间】:2014-04-20 14:07:12
【问题描述】:

我尝试在客户端获取集合的光标。

给出以下代码:

服务器

// make sure that $near stuff works
Meteor.startup(function () {
  Business._ensureIndex({'data.located':'2dsphere'});
});
// publish my collection
Meteor.publish('business', function(sq){
return Business.find(sq);
});

客户端和服务器

 Business = new Meteor.Collection('business');

客户

var searchQuery = {};
searchQuery['data.located'] = {
    $near : {
        $geometry : {
            type : 'Point',
            coordinates : [50, 50]
        },
        $maxDistance : 50000
    }
};
Meteor.subscribe('business', searchQuery);
Business.find(searchQuery);

问题是,游标有 0 个结果。当我在服务器端使用此搜索时,我得到了正确的结果计数!渲染我的模板时调用 Collection.find() 方法。

首先我认为它是异步的,因此我试图在超时回调中获取结果,但这并不能解决问题。

$near 搜索功能不能在客户端使用吗?如果不可能,怎么可能解决这个问题?

【问题讨论】:

  • 不太可能。这似乎有点超出 minimongo 的深度。虽然流星 API 提供了相当多的便利,但实际上您最好实现此服务器端,然后访问发布的自定义方法以获得结果。

标签: mongodb collections meteor


【解决方案1】:

根据changelog 排序,$near 在流星 v0.7.1.1 的 minimongo 中实现。

看起来您在subscribe 之后立即执行find。如果是这种情况,在find 执行之前,数据不会传输到客户端。假设您的查询是正确的,如果您只是等待数据准备好,它可能会起作用。试试这样的:

Meteor.subscribe('business', searchQuery, function() {
  console.log(Business.findOne(searchQuery));
});

请注意,您的代码显示订阅时没有所需的名称 ('business') - 我假设这是一个错字。

【讨论】:

  • 你是对的 - 我订阅时没有正确的名称,但它只是一个错字。我之前只是用 window.timeout 尝试过我的案例 - 但我会尽快检查您的解决方案并发表评论。
  • 就是这样。就这样。我认为我不需要回调,因为当我使用 find() 方法时,其中有一个自动更新。也许是一个愚蠢的头脑......不知道......但效果很好。谢谢:)
  • 对不起。我的评论是错误的。用你的修复它也不起作用! :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2019-06-16
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多