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

Мне интересно, возможно ли использовать геопространственный индекс mongodb с архитектурой Meteor.

Minimongo не реализует геопространственные индексы, но означает ли это, что мы не можем использовать эту функцию монго на стороне сервера?

Например, с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 );

Ответы на вопрос(2)

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

 jeangui10 авг. 2012 г., 17:30
Привет Jifeng, извините за мой поздний ответ. У меня не было времени, чтобы подтвердить свой тест. Наконец, мне удается заставить его работать с запросом find mongo и опцией near. Теперь я должен обернуть результат в карту Google с помощью handlebar.js. Это еще одна проблема ... С уважением
 14 июл. 2012 г., 05:48
Можете ли вы отметить его как принятый, если он отвечает на ваш вопрос?
 jeangui11 июл. 2012 г., 15:51
Привет Jifeng.Yi, спасибо за ваш ответ. Я посмотрел файл mongo_driver.js и согласен с вами, что ничто не запрещает использование геопространственного индекса монго на стороне сервера. Я уже пробовал в небольшом случае использования, но он не работает (я имею в виду, что фильтр $ near не активирован. Я получаю все строки коллекции). Я предполагаю, что это ошибка в моем запросе Монго. Я должен проверить снова. Я был вынужден создать свой индекс db.todos.ensureIndex ({loc: & quot; 2d & quot;}) на уровне базы данных, а не в файле startup.js. С уважением.
Решение Вопроса

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

- Geospatial Search

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

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

Reminder: Эти гео-запросы доступны только наserver (В настоящее время).

- Creating a Geospatial Index from within Meteor (а не в оболочке MongoDB)

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

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

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

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

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

 22 окт. 2012 г., 07:05
@jeangui Смотритеgroups.google.com/forum/#!msg/meteor-talk/8PvWXKocIGI/… , Начиная с 0.5, вы можете просто запустить ._ensureIndex для своей коллекции. Таким образом, приведенный выше пример будет выглядеть так: Places._ensureIndex ({loc: & quot; 2d & quot;});
 12 окт. 2012 г., 21:29
.db не появился у меня сразу. Я должен был обернутьensureIndex позвонить вsetTimeout чтобы дать ему время появиться. Я рискую предположить, что база данных "соединяется" и появляется только как ключ на.mongo как только соединение установлено. Я установил его с 15-секундной задержкой, просто чтобы быть уверенным, так как я не слишком беспокоюсь о последующих вызовах - единственное, что мне действительно нужно, - это вызвать sureIndex один раз.
 jeangui18 окт. 2012 г., 11:48
Здравствуйте, решение ._driver.mongo.db.ensureIndex больше не работает с последним выпуском Meteor (0.5). Я получаю следующую ошибку: «Ошибка типа: не удается прочитать свойство» mongo & apos; из неопределенного & quot ;. Я не знаю, где искать в метеорном источнике, чтобы найти обходной путь. У кого-нибудь есть идея? Заранее спасибо. С уважением.

Ваш ответ на вопрос