graph.cool 和 Algolia 的 Apollo 订阅

Apollo subscription with graph.cool and Algolia

现在我有了带有 MongoDB 地理索引的 Meteor 应用程序。

我正在使用这种 pub/sub:

 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 subs + graph.cool 作为后端 + Algolia 超快速地理搜索?

我需要没有轮询或其他东西的真正反应...

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 订阅监听您感兴趣的模型的创建、更新、删除事件

3) 收到事件后,查询Algolia索引得到最新结果

您可能想要查看 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)
  }
`