Запросы к коллекции
При запросе данных из коллекции вы можете использовать набор ограничений для фильтрации объектов.
Для фильтрации необходимо указать набор условий (фильтров).
Мы используем формат YAML для запросов.
Примечание
Все наборы фильтров начинаются с ключевого слова conditions, все фильтры на первом уровне применяются по условию AND
conditions:
- {operation}
- {operation}Пример
conditions:
- operation: equal
query:
path: name
expected:
value: JonУсловия
- Field: operation
Type: string
Description: Каждое условие должно содержать поле operation
---
- Field: Тело условия
Description: В зависимости от выбранной операции набор полей может варьироваться Операции
В этом разделе перечислены все операции, которые можно использовать в условиях.
- Operation: and
Fields: conditions
Type: []Condition
Description: Содержит набор условий
---
- Operation: or
Fields: conditions
Type: []Condition
Description: Содержит набор условий
---
- Operation: equal
Fields: query, expected
Type: Expression
Description: query: Выражение для вычисления значения,
expected: Выражение для вычисления ожидаемого значения
---
- Operation: not_equal
Fields: query, expected
Type: Expression
Description: query: Выражение для вычисления значения,
expected: Выражение для вычисления ожидаемого значения
---
- Operation: has_keys
Fields: keys
Type: []string
Description: Набор путей для проверки наличия
---
- Operation: not_has_keys
Fields: keys
Type: []string
Description: Набор путей для проверки отсутствияВыражения
В этом разделе перечислены все выражения, которые можно использовать в условиях.
- Expression: Field
Field: field
Type: string
Description: Это расширение позволяет получить значение поля записи целиком.
Ниже вы можете увидеть доступные значения для этого расширения:
• object_id
• value
• created_at
---
- Expression: Path
Field: path
Description: Это расширение позволяет заглянуть внутрь значения объекта.
Для просмотра вложенных значений используйте точку в качестве разделителя.
Примеры:
• a
• a.b
• a.b.c
---
- Expression: Value
Field: value
Type: string, number, array, object, bool
Description: Это расширение позволяет указать конкретное значение для дальнейшего сравненияПримечание к выражению 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"
}
]Базовый фильтр
Сначала найдём совпадение по пути в значении объекта. Для этого нам понадобится оператор equal.
conditions:
- operation: equal
query:
path: name
expected:
value: MartaЭто вернёт все объекты, где поле name равно Marta.
{
"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"
}Теперь найдём всех пользователей, чьё имя не Marta. Для этого нам понадобится оператор not_equal.
conditions:
- operation: not_equal
query:
path: name
expected:
value: MartaЭто вернёт все объекты, где поле name не равно Marta. В нашем случае мы получим объект с пользователем Joe.
{
"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"
}Теперь запросим всех пользователей с полным совпадением части объекта.
conditions:
- operation: equal
query:
path: info
expected:
value:
verified: false
banned: trueВыражение value автоматически определяет тип значения (строка, объект, список, число).
В этом случае мы снова получим объект пользователя Joe.
{
"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": [
"critic"
]
},
"created_at": "2006-01-02 15:04:05.999999999 -0700 MST"
}Множественные фильтры
Фильтрация с OR
conditions:
- operation: or
conditions:
- operation: equal
query:
path: info.banned
expected:
value:true
- operation: equal
query:
path: info.verified
expected:
value:falseФильтрация с AND
conditions:
- operation: and
conditions:
- operation: equal
query:
path: info.banned
expected:
value:true
- operation: equal
query:
path: info.verified
expected:
value:falseВложенные фильтры
Вы можете вкладывать условия друг в друга для получения наилучшего результата фильтрации.
conditions:
- operation: and
conditions:
- operation: equal
query:
path: age
expected:
value: 40
- operation: or
conditions:
- operation: equa;
query:
path: info.verified
expected:
value:false
- operation: equal
query:
path: info.banned
expected:
value:trueПоиск сложных объектов
Иногда вам может понадобиться найти объект, где поля объекта каким-то образом связаны друг с другом.
В этом случае вы можете использовать два выражения Path и сравнить их значения друг с другом.
conditions:
- operation: equal
query:
path:
path: first_name
expected:
path: last_nameВ этом примере, если кто-то укажет одинаковые имя и фамилию, мы получим таких пользователей в ответе.
Вы также можете комбинировать разные типы выражений в одном запросе.
conditions:
- operation: and
conditions:
- operation: equal
query:
path: first_name
expected:
path: last_name
- operation: not_equal
query:
path: first_name
expected:
path: Joe