根据与提供的值最接近的值,从数据存储区中获取单个实体的建议(读取最有效)方法是什么。
例如,我有以下DataModel:
class MyObject(db.Model):
someValue = db.IntegerProperty()
shortDescription = db.TextProperty()
在传递值的GET期间,我想查询数据存储区中与提供的值最接近的对象。
如果距离相同,则多个结果都可以。即如果我有两个对象,其中someValue在2和4,我传入3。
任何建议都将受到赞赏。
答案 0 :(得分:4)
为所有属性自动创建升序和降序索引,因此您可以执行以下操作:
results1 = MyObject.all().order('someValue').filter('someValue >=', 3).fetch(50)
results2 = MyObject.all().order('-someValue').filter('someValue <', 3).fetch(50)
这将为您提供两个结果集,在搜索值附近最多可包含100个对象。
答案 1 :(得分: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"
不幸的是,我认为没有办法进行这一个查询,但我可能错了。