2016-02-28 10 views
0

Пусть у меня есть эти документы в таблице Things:фильтра, где атрибут в поставляемом массиве

{ 
    "name": "Cali", 
    "state": "CA" 
}, 
{ 
    "name": "Vega", 
    "state": "NV", 
}, 
{ 
    "name": "Wash", 
    "state": "WA" 
} 

Моего UI является состояние выбором, в котором пользователь может выбрать несколько состояний. Я хочу показать соответствующие результаты. SQL эквивалент будет:

SELECT * FROM Things WHERE state IN ('CA', 'WA') 

Я попытался:

r.db('test').table('Things').filter(r.expr(['CA', 'WA']).contains(r('state'))) 

но не возвращает ничего, и я не понимаю, почему это не сработало бы.


Это работает для получения единого государства:

r.db('test').table('Things').filter(r.row('state').eq('CA')) 

ответ

1
r.db('test').table('Things').filter(r.expr(['CA', 'WA']).contains(r.row('state'))) 

, кажется, работает в некоторых версиях и возвращает

[ 
    { 
    "id": "b20cdcab-35ab-464b-b10b-b2f644df73e6" , 
    "name": "Cali" , 
    "state": "CA" 
} , 
    { 
    "id": "506a4d1f-3752-409a-8a93-83385eb0a81b" , 
    "name": "Wash" , 
    "state": "WA" 
    } 
] 

Во всяком случае, вы можете использовать функцию вместо r.row:

r.db('test').table('Things').filter(function(row) { 
    return r.expr(['CA', 'WA']).contains(row('state')) 
}) 
+0

Это то, что я получаю, когда я копирую/вставляю строку в свой ответ: http://i.imgur.com/DEheCV1.png 'e: Невозможно использовать r.row во вложенных запросах. Вместо этого используйте функции « –

+0

» Редактировал мой ответ, следующий за вашим комментарием: P – Kludge

+0

А, очень интересно. Функция работает. Я надеялся, что будет более сжатый подход. –