我想知道是否可以在流星架构中使用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 );
答案 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支持地理空间索引。