Язык запросов 2.0 в API

Используйте язык запросов 2.0, чтобы задать условия поиска задач в параметре query2. MLJ (Mongo-like JSON) — формат JSON для описания фильтра QL2.

В отличие от параметра query, в query2 передается не строка из интерфейса Трекера, а JSON-объект.

Параметр query2 поддерживается в методе Найти задачи в версиях API v2 и v3. Рекомендуем использовать v3.

Формат запроса

Общий вид запроса с параметром query2:

POST /v3/issues/_search
Host: api.tracker.yandex.net
Content-Type: application/json
Authorization: OAuth <OAuth-токен>
X-Org-ID или X-Cloud-Org-ID: <идентификатор_организации>

{
  "query2": {
    "<ключ_поля>": {
      "<оператор_отношения>": "<значение_или_функция>"
    }
  }
}

Значение query2 — выражение MLJ. Оно строится из трех видов конструкций:

  • условие по полю — сравнивает поле задачи с заданным или вычисляемым значением;
  • логическая группа — объединяет несколько условий с помощью логического оператора;
  • макрос — задает условие по связанному объекту или включает условия сохраненного фильтра.

В синтаксисе MLJ все служебные слова начинаются с $: логические операторы, операторы отношения, макросы и функции. Ключи полей и значения, заданные напрямую, не начинаются с $.

Условие по полю

В условии укажите идентификатор поля задачи, оператор отношения и значение. Для системного или глобального поля используйте ключ. Например, assignee — ключ поля «Исполнитель». Отображаемое название поля вместо ключа использовать нельзя. Доступные ключи перечислены на странице Поля задач.

Для локального поля очереди укажите идентификатор поля для API (apiId). Как узнать идентификатор локального поля

Значение зависит от поля и оператора. Это может быть строка, число, дата или массив значений. Вместо непосредственного значения можно указать функцию. Она вычисляет значение во время выполнения запроса.

Например, этот запрос найдет задачи, назначенные текущему пользователю:

{
  "query2": {
    "assignee": {
      "$eq": {
        "$me": []
      }
    }
  }
}

Операторы отношения

Оператор отношения сравнивает значение поля с заданным или вычисляемым значением.

Оператор Описание
$eq Равно значению.
$ne Не равно значению.
$in Равно одному из значений массива.
$nin Не равно ни одному из значений массива.
$gt Больше значения. Применяется к числам и датам.
$gte Больше или равно значению. Применяется к числам и датам.
$lt Меньше значения. Применяется к числам и датам.
$lte Меньше или равно значению. Применяется к числам и датам.
$empty Проверяет, заполнено ли поле: true — поле пустое, false — поле заполнено.
$substr Ищет подстроку.
$matchAnd Ищет все слова из строки.
$matchOr Ищет хотя бы одно слово из строки.

Функции

Функция начинается с символа $ и передается как объект. Аргументы функции указываются в массиве. Функции без аргументов принимают пустой массив []. Значение $period передается строкой.

Функция Формат Описание
$me {"$me": []} Текущий пользователь. Применяется к полям типа «Пользователь».
$now {"$now": []} Текущие дата и время.
$today {"$today": []} Диапазон текущего дня.
$week {"$week": []} Диапазон текущей недели.
$month {"$month": []} Диапазон текущего месяца.
$quarter {"$quarter": []} Диапазон текущего квартала.
$year {"$year": []} Диапазон текущего года.
$sum_date {"$sum_date": [<дата>, <период>]} Прибавляет к дате период.
$sub_date {"$sub_date": [<дата>, <период>]} Вычитает из даты период.
$period {"$period": "p2d"} Задает период. Применяется внутри $sum_date и $sub_date.
$sum_num {"$sum_num": [<число>, <число>]} Складывает два числа.
$sub_num {"$sub_num": [<число>, <число>]} Вычитает второе число из первого.

Логическая группа и операторы

Логический оператор объединяет несколько условий. На верхнем уровне его можно не указывать: в этом случае используется $and.

Например, запрос найдет задачи, назначенные текущему пользователю, или задачи с приоритетом blocker либо critical:

{
  "query2": {
    "$or": [
      {
        "assignee": {
          "$eq": {
            "$me": []
          }
        }
      },
      {
        "priority": {
          "$in": ["blocker", "critical"]
        }
      }
    ]
  }
}

Логические операторы связывают условия и группы. Их можно вкладывать друг в друга. Поддерживаются следующие операторы:

Оператор Формат Описание
$and Массив условий или групп Условие с оператором $and выполняется, если выполняются все вложенные условия и группы.
$or Массив условий или групп Условие с оператором $or выполняется, если выполняется хотя бы одно вложенное условие или одна группа.
$not Одно условие или группа Условие с оператором $not выполняется, если вложенное условие или группа не выполняется. В отличие от остальных логических операторов, $not принимает объект, а не массив.
$nor Массив условий или групп Условие с оператором $nor выполняется, если не выполняется ни одно вложенное условие и ни одна группа.

Макросы

Макросы объединения задают условия по связанным с задачей объектам определенного типа, например по комментариям или связям. Они меняют контекст вложенного фильтра. Внутри макроса укажите поля связанного объекта. Значения этих полей можно задавать функциями. Задача попадает в результаты поиска, если хотя бы один объект соответствует вложенному фильтру.

Например, этот запрос найдет задачи с комментарием текущего пользователя:

{
  "query2": {
    "$comments": {
      "comment.author": {
        "$eq": {
          "$me": []
        }
      }
    }
  }
}

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

Макрос Связанный объект Пример поля вложенного фильтра
$comments Комментарии задачи comment.author, comment.text
$links Связи задачи link.to.key, link.relationship
$events События в истории задачи events.by, events.date
$components Компоненты component.lead
$queue Очередь queue.lead
$projects Проекты project.lead
$include Сохраненный фильтр include.id
$sla SLA sla.enabled
$checklistItems Пункты чеклиста checklistItem.checked
$sprints Спринты sprint.boardId

Макрос $include отличается от остальных: он не меняет контекст на связанный объект, а включает в запрос условия сохраненного фильтра. Укажите идентификатор фильтра в поле include.id.

Например, этот запрос ищет задачи, которые соответствуют сохраненному фильтру с идентификатором 123:

{
  "query2": {
    "$include": {
      "include.id": {
        "$eq": 123
      }
    }
  }
}