Получение «ближайшего» значения из хранилища данных - PullRequest
2 голосов
/ 15 октября 2010

Каков рекомендуемый (наиболее эффективный) способ получения одной сущности из хранилища данных на основе значения, ближайшего к указанному.

Например, у меня есть следующая модель данных:

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

Во время GET передается значение, я хотел бы запросить в хранилище данных объект (ы), которые являются ближайшими к предоставленному значению.

Несколько результатов хороши, если они находятся на одинаковом расстоянии.Т.е. если у меня есть два объекта с someValue в 2 и 4, и я передаю в 3.

Буду признателен за любой совет.

Ответы [ 2 ]

4 голосов
/ 15 октября 2010

Для всех свойств автоматически создается восходящий и нисходящий индексы, поэтому вы можете сделать что-то вроде этого:

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

Это даст вам два набора результатов с до 100 объектов в непосредственной близости от вашего поисказначение.

2 голосов
/ 15 октября 2010

Запрос GQL GqlQuery("SELECT * FROM MyObject WHERE someValue < :1 ORDER BY someValue DESC", input).get() вернет один элемент, ближайший к входному значению и меньший его.

Чтобы получить элемент, ближайший к входному значению и превышающий его, переключите его: SELECT * FROM MyObject WHERE someValue > :1 ORDER BY someValue ASC"

К сожалению, я не думаю, что есть способ сделать этот запрос, но я могу ошибаться.

...