Как использовать фильтр ReQL и команду соответствия для массивов

У меня есть таблица в rethinkdb, где каждая строка имеет следующую структуру -

{
  'name':'clustername',
  'services':[
     {
        'name':'service1'
     },
     {
        'name':'service2'
     }
  ]
}

Я выполняю запрос для фильтрации объекта service2, подобного этому

r.table('clusters').filter({"name":  "clustername"})
  .pluck('services').filter((service) => { 
     return service("name").match('service2')
  })

Но это ничего не возвращает: No results were returned for this query

Кто-нибудь может сказать, почему это происходит?


person Pavan Kishore    schedule 18.08.2017    source источник


Ответы (1)


pluck возвращает последовательность, поэтому этот запрос:

r.table('clusters').filter({"name":  "clustername"}).pluck('services')

вернусь:

{

    "services": [
        {
            "name": "service1"
        } ,
        {
            "name": "service2"
        }
    ]

}

Вам нужно получить из него поле services, он вернет массив с полем services элементов, найденных filter.

И после этого вам нужно использовать второй фильтр для каждого элемента, используя map.

Итак, правильный запрос:

r.table('clusters').filter({"name": "clustername"}).pluck('services')("services").map(item => {
    return item.filter(service => { 
      return service("name").match("service2");
    });

})
person Suvitruf - Andrei Apanasik    schedule 20.08.2017