从数据存储中获取“最接近”的值

时间:2010-10-15 15:45:24

标签: google-app-engine google-cloud-datastore

根据与提供的值最接近的值,从数据存储区中获取单个实体的建议(读取最有效)方法是什么。

例如,我有以下DataModel:

class MyObject(db.Model):
    someValue = db.IntegerProperty()
    shortDescription = db.TextProperty()

在传递值的GET期间,我想查询数据存储区中与提供的值最接近的对象。

如果距离相同,则多个结果都可以。即如果我有两个对象,其中someValue在2和4,我传入3。

任何建议都将受到赞赏。

2 个答案:

答案 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"

不幸的是,我认为没有办法进行这一个查询,但我可能错了。