Функции извлечения данных RQL для работы с объектами доменов
Получение значения ключа из составных атрибутов (extract())
Функция extract() используется для получения значения отдельного ключа из атрибута с типом данных, который хранится как JSON-объект.
extract(<attribute>, '<key>' [, '<data-type>'])
Здесь:
-
<attribute>— атрибут; -
<key>— имя ключа внутри объекта; -
<data-type>(необязательный аргумент) — тип данных, к которому необходимо привести извлеченное значение. По умолчанию функция возвращает значение типаText.
К типам данных, которые хранятся как JSON-объект, относятся, например, Ссылка (URL) и Файл (Attachment). В атрибутах типа URL хранятся ссылка на ресурс и опционально — лейбл:
{
link: String,
alias: String
}
В атрибутах типа Attachment содержится, в частности, информация об имени файла и его размере.
Примеры
URLconstraint: !rql fieldURL IS NULL OR extract(@doc.fieldURL, 'link') = 'https://example.com'
Данное RQL-выражение задает ограничение для значения атрибута fieldURL:
-
Если значение
fieldURLне задано, ограничение считается выполненным. -
В противном случае:
-
Из атрибута извлекается значение по ключу
link. -
Это значение сравнивается со строкой
'https://example.com'.
-
Таким образом, значение атрибута fieldURL должно содержать ссылку https://example.com.
Attachmentconstraint: !rql attachment IS NULL OR (extract(@doc.attachment, 'filename') LIKE '%jpg' AND extract(@doc.attachment, 'size', 'INTEGER') < 50000)
Данное RQL-выражение накладывает следующие ограничения на атрибут attachment:
-
Если значение
attachmentне задано, ограничение считается выполненным. -
В противном случае:
-
Из атрибута
attachmentизвлекается значение ключаfilenameи проверяется, что имя файла оканчивается на.jpg; -
Из этого же атрибута извлекается значение ключа
size, приводится к типуINTEGERи сравнивается с числом 50 000.
-
Таким образом, атрибут attachment должен содержать файл с расширением .jpg размером менее 50 000 байт.
Была ли полезна эта страница?