MQuery использует синтаксис запросов MongoDB и позволяет применять его к строкам запроса за счет преобразования между querystring и JSON. В следующих описаниях и примерах будут приведены соответствующие JSON-формы для лучшего понимания.
querystring
<prop1>[<op1>]=<val1>
&<prop1>[<op2>]=<val2>
&<prop2>[<op1>]=<val1>
&<prop2>[<op2>]=<val2>
&$sort[<prop>]=1
&$skip=0
&$limit=20
JSON
{
"<prop1>": { // Для одного свойства
"<op1>": "<val1>", // Операция сравнения
"<op2>": "<val2>" // Другая операция сравнения
},
"<prop2>": { // Другие свойства
"<op1>": "<val1>", // Операция сравнения
"<op2>": "<val2>" // Другая операция сравнения
},
"$sort": {
"<prop>": 1 // Сортировка по одному свойству в порядке возрастания
},
"$skip": 0, // Указывает начальную позицию для пагинации
"$limit": 20 // Указывает количество элементов для пагинации
}
Здесь <prop>
соответствует имени свойства элемента, поддерживаются вложенные объекты, используя точечную нотацию, например: rootProp.nestedProp
.
А <op>
представляет несколько операторов сравнения, реализованные операторы включают $eq
(равно, может быть опущено), $ne
(не равно), $gt
(больше), $gte
(больше или равно), $lt
(меньше), $lte
(меньше или равно), $in
(входит в) и $nin
(не входит в).
Оператор $sort
используется для сортировки, сортирует по указанному <prop>
и значению сортировки (1 для возрастания, -1 для убывания), поддерживает сортировку по нескольким свойствам, первое свойство имеет наивысший приоритет.Операторы $skip
и $limit
используются для пагинации, $skip
указывает количество элементов для пропуска, а $limit
указывает количество элементов для получения.
Каждое свойство и его операция связаны логическим AND, поддержка OR-запросов отсутствует, все операторы являются необязательными.
Пример данных
[
{ "id": 1, "username": "Alice", "age": 18, "country": "USA" },
{ "id": 2, "username": "Bob", "age": 20, "country": "UK" },
{ "id": 3, "username": "Carl", "age": 47, "country": "Canada" },
{ "id": 4, "username": "Daniel", "age": 50, "country": "USA" },
{ "id": 5, "username": "Eva", "age": 35, "country": "Poland" },
{ "id": 6, "username": "Fiona", "age": null, "country": "Russia" },
]
Запрос на username равный "Alice"
?username=Alice
{ "username": "Alice" }
или
?username[$eq]=Alice
{ "username": { "$eq": "Alice" } }
Результат
[
{ "id": 1, "username": "Alice", "age": 18, "country": "USA" },
]
Запрос на выборку данных, где возраст больше 35
?age[$gt]=35
{ "age": { "$gt": 35 } }
Результат
[
{ "id": 3, "username": "Carl", "age": 47, "country": "Canada" },
{ "id": 4, "username": "Daniel", "age": 50, "country": "USA" },
]
Запрос на выборку данных, где страна — USA или UK, значения могут повторяться, могут быть заключены в []
или иметь индекс
?country[$in]=USA&country[$in]=UK
{ "country": { "$in": [ "USA", "UK" ] } }
Результат
[
{ "id": 1, "username": "Alice", "age": 18, "country": "USA" },
{ "id": 2, "username": "Bob", "age": 20, "country": "UK" },
{ "id": 4, "username": "Daniel", "age": 50, "country": "USA" },
]
```#### Множественная сортировка
Запрос на выборку данных, где страна — USA и возраст больше 20
?country=USA&age[$gt]=20
```json
{ "country": "USA", "age": { "$gt": 20 } }
Результат
[
{ "id": 4, "username": "Daniel", "age": 50, "country": "USA" }
]
Пустое значение ключа-значения указывает на null, отсутствие фильтрации по пустым строкам, пустая строка рассматривается как null.
Запрос на выборку данных, где возраст — null
?age=
{ "age": null }
Результат
[
{ "id": 5, "username": "Fiona", "age": null, "country": "Russia" }
]
Пустое значение для обязательного поля приведет к ошибке
?id=
{ "id": null }
Результат
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Произошло одно или несколько ошибок валидации.",
"status": 400,
"traceId": "|2d44fb44-4ac839ff4e4fe16e",
"errors": {
"id": [
"Невозможно преобразовать {null} в тип Int32."
]
}
}
Сортировка по возрасту в порядке возрастания
?$sort[age]=1
{ "$sort": { "age": 1 } }
Результат
[
{ "id": 6, "username": "Fiona", "age": null, "country": "Russia" },
{ "id": 1, "username": "Alice", "age": 18, "country": "USA" },
{ "id": 2, "username": "Bob", "age": 20, "country": "UK" },
{ "id": 5, "username": "Eva", "age": 35, "country": "Poland" },
{ "id": 3, "username": "Carl", "age": 47, "country": "Canada" },
{ "id": 4, "username": "Daniel", "age": 50, "country": "USA" }
]
Пропустить 3 элемента, взять 2 элемента
?$skip=3&$limit=2
{ "$skip": 3, "$limit": 2 }
Результат
[
{ "id": 4, "username": "Daniel", "age": 50, "country": "USA" },
{ "id": 5, "username": "Eva", "age": 35, "country": "Poland" }
]
```[^1]: Значение `null` может не совпадать с порядком, указанным в документе.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )