Google maps Google ndb——如何对2个(或更多)属性进行范围查询

Google maps Google ndb——如何对2个(或更多)属性进行范围查询,google-maps,app-engine-ndb,Google Maps,App Engine Ndb,我有一张有[活动时间| LAT | LONG | time…等]的桌子。给定一个lat-long值,我想获取在lat/long的某个范围内的所有事件,比如说大约5英里。在SQL中,我可能会执行以下操作: SELECT * WHERE LAT > lat+5 and LAT < lat-5 AND LONG > long+5 and LONG < long-5. 我可以在谷歌的ndb数据库中做类似的事情吗?我看到一个关于单个属性的过滤器查询,例如:

我有一张有[活动时间| LAT | LONG | time…等]的桌子。给定一个lat-long值,我想获取在lat/long的某个范围内的所有事件,比如说大约5英里。在SQL中,我可能会执行以下操作:

SELECT * WHERE LAT > lat+5 and LAT < lat-5
           AND LONG > long+5 and LONG < long-5. 
我可以在谷歌的ndb数据库中做类似的事情吗?我看到一个关于单个属性的过滤器查询,例如:

qry = Account.query(Account.userid >= 40, Account.userid < 50)
但它似乎不允许多个属性

问候
GA

这是对数据存储的限制,而不仅仅是NDB,您不能这样做。您可以尝试使用geohashing,或者如果没有太多数据,只需在一个维度上执行范围查询,然后使用Python代码过滤另一个维度。

谢谢您的回答。我们目前正在这样做-首先在一个维度上过滤,然后通过循环结果在另一个维度上过滤。从50000个数据点,得到10或20个结果点需要20-30秒。太慢了!令人失望的是,ndb没有多属性搜索。我可以在Sqlite中在毫秒内完成这项工作。我们将研究这个地理哈希。谢谢。跟我重复一遍:这不是NDB的问题。基础数据存储不支持二维查询。NB只是一个客户端库;数据存储是存储服务器。不管怎样,当你说它需要20-30秒时,你实际上在内存中加载了多少点?您可以使用批处理大小来查看是否可以对其进行调整。