【问题标题】:Getting the "Closest" Value out of the Datastore从数据存储中获取“最接近”的值
【发布时间】:2010-10-15 23:56:21
【问题描述】:
根据最接近提供的值从数据存储中获取单个实体的推荐(读取最有效)方法是什么。
例如,我有以下 DataModel:
class MyObject(db.Model):
someValue = db.IntegerProperty()
shortDescription = db.TextProperty()
在 GET 期间传入一个值,我想在数据存储中查询最接近提供值的对象。
如果它们的距离相同,则可以有多个结果。 IE。如果我有两个对象的 someValue 分别为 2 和 4 并且我传入 3.
任何建议将不胜感激。
【问题讨论】:
标签:
google-app-engine
google-cloud-datastore
【解决方案1】:
自动为所有属性创建升序和降序索引,因此您可以执行以下操作:
results1 = MyObject.all().order('someValue').filter('someValue >=', 3).fetch(50)
results2 = MyObject.all().order('-someValue').filter('someValue <', 3).fetch(50)
这将为您提供两个结果集,在您的搜索值附近最多包含 100 个对象。
【解决方案2】:
GQL 查询GqlQuery("SELECT * FROM MyObject WHERE someValue < :1 ORDER BY someValue DESC", input).get() 将返回最接近且小于输入值的一项。
要获得最接近并大于输入的项目,请将其切换:SELECT * FROM MyObject WHERE someValue > :1 ORDER BY someValue ASC"
不幸的是,我认为没有办法进行这个查询,但我可能错了。