Подписка Apollo с graph.cool и Algolia

Теперь у меня есть приложение Meteor с геоиндексами MongoDB.

И я использую такой паб/саб:

 Meteor.publish('items', function itemsPublication(NELat, NELong, SWLat, SWLong) {

  return Items.find({
    $and: [
        {
            'till': {
                $gte: new Date()
            }
        },
        {
            'o': { $geoWithin: { $box: [ [ SWLong,SWLat], [ NELong, NELat] ] }  }
        }

    ]
   }, {
     fields: {
        o: 1,
        t: 1,
     }
   })
})

И я добавляю некоторые индексы, например:

Item._ensureIndex({
    'till':1, 'o': '2dsphere' 
})

Все работает нормально...

Главный вопрос: можно ли заменить Meteor pub/sub + геоиндексы MongoDB на сабы Apollo + graph.cool в качестве бэкенда + сверхбыстрый геопоиск Algolia?

Мне нужна реальная реактивность без опроса или чего-то еще...


person none    schedule 06.04.2017    source источник


Ответы (2)


В настоящее время Graphcool не поддерживает пространственные запросы. По этой причине вы не сможете получить реактивный опыт, к которому вы привыкли, от Meteor и который Graphcool поддерживает для других типов данных. У нас есть открытый запрос на эту функцию, и после слияния Graphcool будет в этом отношении наравне с Apollo.

Тем не менее, вот как вы можете реализовать обходной путь с помощью Algolia, пока ждете встроенной поддержки:

1) Настройте интеграцию Algolia для гео-запросов, как описано здесь https://www.graph.cool/docs/tutorials/algolia-auto-syncing-for-graphql-backends-aroozee9zu/#algolia-geosearch

2) Настройте подписку GraphQL на прослушивание событий Create, Update, Delete для интересующей вас модели.

3) Когда события получены, запросите индекс Algolia, чтобы получить последний результат.

person sorenbs    schedule 06.04.2017
comment
@sorenbs есть ли какие-либо оценки времени, когда будет доступна встроенная поддержка гео-запросов? :) - person Lukas; 17.06.2017
comment
@LucèBrùlè У нас пока нет конкретных сроков. Подпишитесь на этот выпуск для получения обновлений github.com/graphcool/feature-requests/issues/28 - person sorenbs; 18.06.2017

Вы можете проверить apollo-link-algolia, чтобы напрямую использовать сервис Algolia с Apollo. от клиента. Этот пакет представляет собой простую оболочку вокруг algoliasearch-helper-js. Если вы хотите использовать его для выполнения гео-запросов, это так же просто, как создать следующий запрос в GraphQL:

const LOCATIONS_QUERY = gql`
  query LocationsQuery {
    locationsInRadius @algolia(index: "dev_LOCATIONS", aroundLatLng: "40.71, -74.01", aroundRadius: 1000)
  }
`
person jano    schedule 22.05.2018