2013-09-20 3 views
3

Я хочу, чтобы кто-то подтвердил правильный способ создания запроса ниже. Документы заполнены тривиальными примерами запросов, но некоторые примеры средней сложности были бы полезны - чтобы узнать лучшие практики.Несколько фильтров с лямбдой в RethinkDB

можно фильтровать с помощью запроса, такие как это:

r.table('backups').filter(
    {'verified': True} 
).run(conn) 

тот же запрос может быть написан таким образом, с ReQL лямбда стенографии:

r.table('backups').filter(
    r.row['verified'] == True 
).run(conn) 

Затем я попытался добавить еще один фильтр этот запрос, как это так, но он не дал правильные результаты:

r.table('backups').filter(
    r.row['verified'] == True and r.row['id'].match("^aad") 
).run(conn) 

Правильный ли способ написать этот запрос для использования двух вызовов filter? and оператор

r.table('backups').filter(
    r.row['verified'] == True 
).filter(
    r.row['id'].match("^aad") 
).run(conn) 

ответ

5

Пайтона не переводит на язык запросов RethinkDB. Вы должны использовать & вместо:

r.table('backups').filter(
    (r.row['verified'] == True) & r.row['id'].match("^aad") 
).run(conn) 
+0

Ах да. Я увидел одиночный амперсанд и предположил, что это побитовая операция. Он фактически используется для логики в ReQL: http://www.rethinkdb.com/api/#py:math_and_logic-and – mafrosis

+0

Ох и бонусные баллы за подтверждение того, что 2 вызова фильтра совпадают с использованием амперсанда :) – mafrosis

+0

Да, используя '&' или использование двух фильтров даст одинаковые результаты. – AtnNn

1

На самом деле это самый лучший подход:

r.table('backups').filter(
    (doc['verified'] == _filters.get('verified') if _filters.has_key("verified") else doc['verified']) & \ 
    (doc['id'] == _filters.get('id') if _filters.has_key("id") else doc['id']) 
).run(conn) 

Обычно у вас есть Dict значений, которые вы хотите фильтровать, а не фиктивные значения, принятого ответа. По умолчанию, если какой-либо параметр установлен равным null, он будет фильтровать нулевые значения. Этот не делает этого, просто отфильтруйте те, которые присутствуют в dict

+0

Ты мой герой @ Джулио! – Desprit

Смежные вопросы