Мы рады объявить о выпуске Расширенных запросов (бета), который теперь доступен для всех учетных записей. Это очень важно для команд, которые хотели бы использовать Cosmic помимо базового управления контентом, позволяя использовать лазерную логику для доставки контента.

Как это работает
Расширенные запросы предоставляют мощные функции, аналогичные базам данных NoSQL, для выборки данных. Используя конечную точку Cosmic REST API и доступные клиенты (включая Cosmic GraphQL API), вы можете настроить свой запрос в стиле NoSQL (в формате JSON), чтобы настроить селекторы и логику запроса. См. ниже примеры и документы для получения дополнительной информации.

Примеры

Для краткости используйте следующую переменную bucket для следующих примеров.

const bucket = Cosmic.bucket({
  slug: 'bucket-slug',
  read_key: "your-read-key-found-in-bucket-settings"
});

Сопоставьте объекты с точным названием

bucket.getObjects({
  type: 'posts',
  props: 'slug,title,content',
  query: {
    "title": "Post 1"
  }
});

Соответствие объектам, превышающим или равным значению метаданных

bucket.getObjects({
  type: 'posts',
  props: 'slug,title,content',
  query: {
    "metadata.price": {
      "$gte": 9.99
    }
  }
});

Сопоставление объектов с вложенным значением метаданных JSON (метаполе JSON)

bucket.getObjects({
  type: 'posts',
  props: 'slug,title,content',
  query: {
    "metadata.json_data": {
      "is_awesome": true,
      "other_data": {
        "nested": "yep"
      }
    }
  }
});

Сопоставление объектов с любыми значениями метаданных

bucket.getObjects({
  type: 'posts',
  props: 'slug,title,content',
  query: {
    "$or": [
      {
         "metadata.grade": "A"
      },
      {
        "metadata.grade": "B"
      }
    ]
  }
});

Сопоставление объектов со строкой в ​​содержимом с помощью регулярного выражения. Нечувствительны к регистру в $options.

bucket.getObjects({
  type: 'posts',
  props: 'slug,title,content',
  query: {
    "content": {
      "$regex": "jamstack",
      "$options": "i"
    }
  }
});

Сопоставление объектов с любыми значениями метаполя нескольких объектов

bucket.getObjects({
  type: 'posts',
  props: 'slug,title,content',
  query: {
    "metadata.categories": {
      "$in": ["category_id-1","category_id-2"]
    }
  }
});

Соответствие объектам, не имеющим значений метаполя нескольких объектов

bucket.getObjects({
  type: 'posts',
  props: 'slug,title,content',
  query: {
    "metadata.categories": {
      "$nin": ["category_id-1","category_id-2"]
    }
  }
});

Полный список селекторов запросов и логических операторов см. в документации.

Расширенные запросы в API GraphQL
Возможно, вам потребуется установить переменную за пределами основной области запроса. Добавьте что-то вроде этого в область переменных запроса:

{
  "query": {
    "title": {
      "$regex": "another",
      "$options": "i"
    }
  }
}

Нажмите здесь, чтобы перейти на полную страницу Игровая площадка Cosmic GraphQL

Мы надеемся, что вам понравится использовать расширенные запросы, которые предоставят вам больше возможностей и гибкости для получения вашего контента Cosmic. Это бета-версия, и мы хотели бы получить ваши отзывы по мере улучшения этой функции, поэтому, пожалуйста, дайте нам знать, что вы думаете! Свяжитесь с нами в Twitter и присоединяйтесь к беседе в Slack.