Фильтр, где атрибут находится в предоставленном массиве

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

{
  "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'))
})
Другие вопросы по тегам