2010-10-15 61 views
2

根据与所提供的值最接近的值,从数据存储中获取单个实体的建议(最有效)方式是什么?从数据存储中获取“最近”值

例如,我有以下的DataModel:

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

期间获得一个值传递,我想查询对象(一个或多个)的数据存储区即是最接近所提供的值。

如果距离相同,多个结果都可以。即如果我有两个对象与2和4 someValue和我通过3.

任何意见,将不胜感激。

回答

4

上升和下降指标将自动为所有属性创建的,所以你可以做这样的事情:

results1 = MyObject.all().order('someValue').filter('someValue >=', 3).fetch(50) 
results2 = MyObject.all().order('-someValue').filter('someValue <', 3).fetch(50) 

这会给你两个结果集多达100个对象中搜索值的接近。

+0

谢谢你,我希望有一个单一的查询,但这个工作就像一个魅力。 – MarkPowell 2010-10-15 18:15:54

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"

不幸的是,我不认为有一个方法,使这一个查询,但我可能是错的。

+0

谢谢,杰森,希望我可以将两个答案都标记为已接受。 – MarkPowell 2010-10-15 18:16:18