15.1 Запросы к коллекции
Когда вы запрашиваете данные из коллекции, вы можете использовать набор ограничений для фильтрации объектов.
Для фильтрации необходимо указать набор условий (или фильтров).
Мы используем YAML
для формата запроса.
Примечание
Все наборы фильтров начинаются с ключевого слова conditions
, все фильтры на первом уровне применяются по условию AND
conditions:
- {operation}
- {operation}
Пример
conditions:
- operation: equal
query:
path: name
expected:
value: Jon
Условия
- Поле: operation
Тип: string
Описание: Каждое условие должно содержать поле operation
---
- Поле: Тело условия
Описание: В зависимости от выбранной операции, набор полей может
варьироваться
Операции
В этом разделе перечислены все операции, которые вы можете использовать в условиях.
- Операция: and
Поля: conditions
Тип: []Condition
Описание: Содержит набор условий
---
- Операция: or
Поля: conditions
Тип: []Condition
Описание: Содержит набор условий
---
- Операция: equal
Поля: query, expected
Тип: Expression
Описание: query: Выражение для вычисления значения,
expected: Выражение для вычисления ожидаемого значения
---
- Операция: not_equal
Поля: query, expected
Тип: Expression
Описание: query: Выражение для вычисления значения,
expected: Выражение для вычисления ожидаемого значения
---
- Операция: has_keys
Поля: keys
Тип: []string
Описание: Набор путей для проверки наличия
---
- Операция: not_has_keys
Поля: keys
Тип: []string
Описание: Набор путей для проверки отсутствия
Выражения
В этом разделе перечислены все выражения, которые вы можете использовать в условиях.
- Выражение: Field
Поле: field
Тип: string
Описание: Это выражение позволяет получить значение поля записи в целом.
Ниже приведены доступные значения для этого выражения:
• object_id
• value
• created_at
---
- Выражение: Path
Поле: path
Тип: string
Описание: Это выражение позволяет заглянуть внутрь значения объекта.
Для просмотра вложенных значений используйте точечный
разделитель.
Примеры:
• a
• a.b
• a.b.c
---
- Выражение: Value
Поле: value
Тип: string, number, array, object, bool
Описание: Это выражение позволяет указать конкретное значение для
дальнейшего сравнения
Примечание для выражения Path
Рассмотрим пример объекта и два фильтра
{
"t1": {
"ddd": "ewwflsdk",
"grz": "d123",
"aaa": "123"
}
}
Фильтр который сработает:
conditions:
- operation: equal
query:
path: t1.grz
expected:
value: d123
Фильтр который не сработает:
conditions:
- operation: equal
query:
path: t1
expected:
value:
grz: d123
Это поведение связано с тем что мы сравниваем весь результат полученный в выражении Path
со всем результатом полученным в выражении Value
.
Для случаев когда нужно сравнить только часть полученного объекта можно составить выражение из двух и более фильтров.
Например следующее выражение будет игнорировать часть объекта по адресу t1
но сравнивать сразу два значения из вложенного объекта:
conditions:
- operation: equal
query:
path: t1.grz
expected:
value: d123
- operation: equal
query:
path: t1.ddd
expected:
value: ewwflsdk
Примеры фильтрации
Все примеры будут выполнены на основе следующих входных данных.
[
{
"storage_id": "c9d6b296-ab57-435e-a28b-6b207b9674b8",
"collection_name": "users",
"object_id": "8f842609-b710-479b-96d3-0b0f3be62571",
"value": {
"name": "Marta",
"age": 35,
"info": {
"verified": true},
"labels": [
"author",
"reader"
]
},
"created_at": "2006-01-02 15:04:05.999999999 -0700 MST"
},
{
"storage_id": "c9d6b296-ab57-435e-a28b-6b207b9674b8",
"collection_name": "users",
"object_id": "88c90cbe-6aab-43dd-81cb-e7a37580e813",
"value": {
"name": "Joe",
"age": 40,
"info": {
"verified": false,
"banned": true
},
"labels": [
"reader",
"critic"
]
},
"created_at": "2006-01-02 15:04:05.999999999 -0700 MST"
}
]