Использование библиотеки Cloudant Query для простых вопросов (часть 7 из 10)

В предыдущих статьях мы рассмотрели добавление и извлечение документов из базы данных Cloudant по их ключевым полям - полю _id. Есть большая вероятность, что вы хотите, чтобы ваша база данных могла делать больше, и здесь на помощь приходят запросы.

Сделать запрос

Cloudant Query позволяет задавать вопросы о ваших данных Cloudant, такие как:

  • достаньте мне все документы, в которых поле dob меньше 1970-01-01
  • получите все документы, в которых поле dob меньше 1970-01-01, а поле actor равно Marlon Brando
  • получить первые пятьдесят фильмов с Мэтью Бродериком в главной роли в порядке дат
  • получить следующие 50 фильмов, соответствующих предыдущему запросу

Запросы представлены в виде документов JSON, например:

Объект selector является эквивалентом части запроса к реляционной базе данных WHERE. Он определяет значения или диапазоны полей, которые вы ищете. В этом случае оператор $lt ('меньше') используется для выполнения нашего первого запроса (доступны другие операторы).

Чтобы выполнить запрос, мы просто отправляем JSON в конечную точку /db/_find:

Возвращенные данные будут иметь следующий вид:

  • docs - массив совпадающих документов
  • bookmark открывает доступ к следующей странице матчей
  • warning предупреждает нас, что мы выполняем запрос, который заставляет Cloudant сканировать всю базу данных для ответа. Мы можем улучшить производительность с помощью индекса, о котором мы поговорим позже.

Более сложные положения

Наш второй запрос должен использовать оператор $and, которому передается массив предложений. Первое предложение такое же, как и наш первый запрос, и мы добавляем второе предложение для сопоставления по имени актера.

Только документы, соответствующие всем предложениям $and, попадут в набор результатов.

Сортировка

Третий запрос добавляет к объекту запроса атрибут sort:

Мы можем сортировать по одному или нескольким полям в порядке возрастания (asc) или убывания (убывание).

В следующий раз

В следующем посте мы сделаем все это снова, но программно на Node.js, и представим возможность выражения наших запросов на SQL.