流星:发布查找

时间:2015-12-28 01:07:25

标签: meteor publish intersection

我有一个如下集合:

Schema.Place = new SimpleSchema({
    type: {
        type: String,
        autoValue: function(){ return 'Point'; }
    },
    coordinates: {
        type: [Number],
        decimal:true,
    },
});

Schema.Direction = new SimpleSchema({
    _id: {
        type: String,
        optional: true,
    },
    from: {
        type: Schema.Place,
    },
    to: {
        type: Schema.Place,
    }
});

然后,我想根据点查询相同的路线。第一个问题是我无法在同一个查询中查询两个地理索引,所以我按照以下方式执行:

Meteor.publish('Directions', function(direction){
    var ids = Ride.find({
        active: true,
        from: {
            $near: {
                $geometry: {
                    type: 'Point',
                    coordinates: direction.from.coordinates,
                },
                $maxDistance: 5000,
            }
        }
    }).map(function(item){return item._id});

    return Ride.find({
        _id: {$in: ids},
        to :{
            $near: {
                $geometry: {
                    type: 'Point',
                    coordinates: direction.to.coordinates,
                },
                $maxDistance: 5000,
            }
        }
    });
});

问题在于,由于双重查询过滤,发布会失去其反应性......

我有一些想法如何完成这项工作但对我来说似乎很奇怪没有更好的方法:

  • 发布第一个查询并在客户端上进行过滤(但不确定 $ near是支持客户端的))
  • 在发布功能中使用observeChanges
  • 在发布功能中使用流星方法(我在旧的讨论中看过它,但不确定它是否可能或与我的问题相关)。

0 个答案:

没有答案