Монгоский геопространственный индекс и Метеор

Мне интересно, можно ли использовать геопространственный индекс 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 );

Ответ 1

Да, вы можете использовать геопространственный индекс MongoDB в пределах Meteor, и, вы можете создать этот индекс из своего приложения Meteor.

- Геопространственный поиск

Я использую оператор $within ниже, в отличие от оператора $near, упомянутого выше, но это все еще применяется:

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

Напоминание: эти геологические запросы доступны только на сервере (в настоящее время).

- Создание геопространственного индекса изнутри Meteor (а не в оболочке MongoDB)

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

например. Вы можете использовать приведенное выше в bootstrap.js.

Кроме того, вы, вероятно, захотите поместить свой ensureIndex в Meteor.startup или, возможно, когда вы вставляете некоторые начальные данные.


Предупреждение. Как упоминалось здесь, приведенный выше метод вызова ensureIndex - это работа по необходимости официального способа назвать это, поэтому, пожалуйста, ожидайте, что это может измениться.

Обновление: теперь отражает изменения в Meteor 0.5.0, см. комментарий @Dror ниже.

Ответ 2

Да, я думаю, вы можете.

На стороне сервера делегаты Meteor находят/обновляют/.. в node -mongo-native вызов. Вы можете посмотреть код в пакетах /mongo -liveata/mongo_driver.js. И, как я знаю, node -mongo-native поддерживает геопространственный индекс.