Фильтр, где атрибут находится в предоставленном массиве
Предположим, у меня есть эти документы в таблице вещей:
{
"name": "Cali",
"state": "CA"
},
{
"name": "Vega",
"state": "NV",
},
{
"name": "Wash",
"state": "WA"
}
Мой пользовательский интерфейс - это средство выбора состояний, где пользователь может выбирать несколько состояний. Я хочу отобразить соответствующие результаты. Эквивалент 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'))
})