Mongodb地理空间索引和流星

时间:2012-07-09 09:43:45

标签: mongodb meteor minimongo

我想知道是否可以在流星架构中使用mongodb地理空间索引。

Minimongo没有实现地理空间索引,但这是否意味着我们不能在服务器端使用这个mongo功能?

例如,使用todos应用,如果我们在待办事项上使用位置,是否可以这样做:

// Publish complete set of lists to all clients.
Meteor.publish('todos', function (lon,lat) {
   return Todos.find({loc: {$near:[lon,lat]}}).limit(2);
});

在客户端:

Meteor.subscribe('todos', lon, lat );

2 个答案:

答案 0 :(得分:18)

是的,您可以在Meteor中使用MongoDB地理空间索引,也可以在Meteor应用中创建该索引。

- 地理空间搜索

我正在使用下面的$within运算符,而不是上面提到的$near运算符,但这仍然适用:

Meteor.publish('places', function(box) {
    return Places.find({ loc : { $within : { $box : box }}});
});

提醒:这些地理位置查询仅适用于服务器(当前)。

- 在Meteor中创建地理空间索引(而不是在MongoDB shell中)

Places._ensureIndex({ loc : "2d" });

e.g。您可以在bootstrap.js

中使用上述内容

此外,您可能希望将ensureIndex放在Meteor.startup中,或者在插入一些初始数据时。


警告:如上所述here,上述调用ensureIndex的方法是因为缺少正式的方法来调用它,所以请期待这可能变化

更新:现在反映Meteor 0.5.0中的更改,请参阅下面的@Dror评论。

答案 1 :(得分:1)

是的,我想你可以。

在服务器端,Meteor将find / update / ..委托给node-mongo-native调用。您可以查看packages / mongo-livedata / mongo_driver.js中的代码。据我所知,node-mongo-native支持地理空间索引。