0

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

我正在使用这种发布/订阅:

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

我需要真正的反应,而不需要轮询或其他东西......

4

2 回答 2

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索引获取最新结果

于 2017-04-06T15:41:27.863 回答
1

您可能需要查看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)
  }
`
于 2018-05-22T11:07:48.477 回答