1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/seen-well-MQuery

Клонировать/Скачать
syntax.md 7.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.06.2025 06:55 d31a3cb

Синтаксис MQuery

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/seen-well-MQuery.git
git@api.gitlife.ru:oschina-mirror/seen-well-MQuery.git
oschina-mirror
seen-well-MQuery
seen-well-MQuery
master