Команда ReQL: has_fields
Синтаксис команды
sequence.has_fields([selector1, selector2...]) → stream array.has_fields([selector1, selector2...]) → array object.has_fields([selector1, selector2...]) → boolean
Описание
Проверяет, содержит ли объект одно или несколько полей. Объект имеет поле, если у него есть соответствующий ключ и ключ имеет ненулевое значение. Например, объект {'a': 1,'b': 2,'c': null} имеет поля a и b.
Когда применяется к одному объекту, has_fields возвращает true, если объект содержит указанные поля, и false в противном случае. Когда применяется к последовательности, она вернёт новую последовательность (массив или поток) содержащую элементы, имеющие указанные поля.
Пример: Вернуть игроков, которые выиграли игры.
r.table('players').has_fields(:games_won).run(conn)
Пример: Вернуть игроков, которые не выиграли игр. Для этого используйте has_fields с not, заключённое в filter.
r.table('players').filter { |row| row.has_fields(:games_won).not }.run(conn)
Пример: Проверить, выиграл ли определённый игрок какие-либо игры.
r.table('players').get(
'b5ec9714-837e-400c-aa74-dbd35c9a7c4c'
).has_fields(:games_won).run(conn)
Вложенные поля
has_fields позволяет проверить наличие вложенных полей в объектах. Если значение поля само по себе представляет набор пар «ключ-значение», вы можете проверить наличие определённых ключей.
Пример: В таблице players поле games_won содержит одно или несколько полей с видами выигранных игр:
{
:games_won => {
:playoffs => 2,
:championships => 1
}
}
Вернуть игроков, у которых есть поле “championships”.
r.table('players').has_fields(
{:games_won => {:championships => true}}
).run(conn)
Обратите внимание, что true в примере выше проверяет существование championships как поля, а не проверяет, установлено ли значение поля championships в true. Существует более удобная сокращённая форма. (См. pluck для получения более подробной информации.)
r.table('players').has_fields({:games_won => :championships}).run(conn)
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/ruby/has_fields/