13

我想知道是否可以将 mongodb 地理空间索引与 Meteor 架构一起使用。

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

例如,使用todos应用程序,如果我们在 todo 上使用位置,是否可以执行以下操作:

// 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 );
4

2 回答 2

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" });

例如,您可以在bootstrap.js.

此外,您可能想要放入ensureIndexin Meteor.startup,或者在插入一些初始数据时。


警告:正如这里提到的,上述调用方法ensureIndex是一种解决方法,因为缺少官方调用方式,所以请期待这可能会改变。

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

于 2012-08-24T11:05:24.103 回答
1

是的,我认为你可以。

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

于 2012-07-10T03:04:32.437 回答