Статьи

Адаптация синтаксиса NoSQL к базам данных SQL

Одна из самых сильных сторон баз данных NoSQL — это используемый язык запросов. В то время как базы данных SQL в основном необходимы для использования запросов SQL, базы данных NoSQL дают вам возможность создавать и обрабатывать запросы как JSON, что позволяет гораздо более удобочитаемые и понятные запросы в вашем приложении. Ниже мы рассмотрим, как Backand адаптирует вдохновленный MongoDB язык запросов NoSQL к операторам SQL, позволяя вам использовать любую идиому, позволяющую чувствовать себя наиболее продуктивно.

Компоненты запроса

Запросы NoSQL в Backand состоят из следующих компонентов:

  • объект — объект для запроса
  • q (запрос) — запрос для выполнения
  • fields — поля для возврата из запроса
  • groupBy — поле для группировки результатов
  • агрегат — функции, применяемые к столбцам и полям в запросе
  • orderBy — определяет, как упорядочить возвращенные данные
  • limit — ограничивает количество возвращаемых записей

Каждый из этих компонентов имеет ряд предполагаемых применений и может доказать гибкость при большом количестве запросов. Просмотрите документацию для получения дополнительной информации по каждому параметру.

Перевод запроса в SQL

Важно отметить, что после получения запроса NoSQL от Backand он преобразуется в SQL по следующей схеме:

SELECT {fields with aggregation}
FROM {object}
WHERE {q}
GROUP BY {groupBy}
ORDER BY {orderBy}
LIMIT {limit}

Это может создать странное поведение, если вы не знакомы с работой SQL-запросов. А именно, все поля должны присутствовать в таблицах соответствующих объектов, и эта агрегация применяется на уровне полей. Вы можете проверить свой JSON-запрос с помощью функции Backand transformJson, которая описана здесь .

Условные выражения

Условные выражения для запросов определяются в JSON одним из четырех способов. Первый — постоянное сравнение со значением поля. Ниже мы запрашиваем все города с названием «Нью-Йорк»:

{ 'city': 'New York' }

Второй использует операторы для более сложного сравнения. Ниже мы возвращаем все объекты с населением более 1000:

{ 'population': { '$gt': 1000 } }

Третий позволяет указать включение в результаты подзапроса. Например, следующий подзапрос ищет все записи, в которых присутствует идентификатор продукта в центре распространения в Чикаго:

{
 'productID': {
  '$in': {
   'object': 'distributions',
   'fields': 'productID',
   'q': {
    'city': 'Chicago'
        }
      }
    }
  }

Четвертый пример позволяет выполнить операцию любого из вышеперечисленных запросов. Это может быть комбинация с использованием $ и или $ или, или отрицание с использованием $ not. Например, чтобы найти все города, которые не названы «Нью-Йорк» или имеют население не менее 1000 долларов, используйте следующее:

{
  '$or': [
    {
     '$not': { 'location': 'New York'}
    },
    {
     'population': { '$gt': 1000 }
    }
  ]
}

Обратите внимание на использование оператора Array ([]) выше — он сообщает построителю запросов, какие предложения объединять в условии «ИЛИ».

фильтры

У вас также есть возможность указать NoSQL-запрос в качестве фильтра. Это позволяет вам использовать переменные в ваших запросах, предоставляя вам больше гибкости для получения именно тех данных, которые вам нужны. Переменные заполняются значениями после попадания на серверы Backand. Заполненные значения либо извлекаются непосредственно из связанной таблицы, либо они могут быть предоставлены в качестве аргумента в HTTP-запросе, выполняющем фильтр. Укажите переменную, используя следующий синтаксис:

'{{ <variable_name> }}'

Просто замените <variable_name> той переменной, которую вы хотите использовать. Обратите внимание, что вся структура переменных должна быть заключена в кавычки, чтобы окончательный запрос представлял допустимый JSON. Это имя переменной заполняется правильным значением до выполнения запроса.

Важно отметить, что хотя Backand будет избегать констант, отправленных как часть запроса NoSQL, значения переменных не могут быть экранированы. Это означает, что вы должны быть уверены, что возможные значения для используемой переменной не содержат небезопасный синтаксис SQL, поскольку это приведет к сбою запроса (или, что еще хуже, к неожиданным побочным эффектам).

Вывод

Запросы NoSQL знакомы многим веб-разработчикам, особенно тем, кто имеет опыт работы со стеком MEAN. Хотя Backand построен на основе SQL, наш NoSQL Query Language позволяет создавать запросы с помощью любого инструмента, который вы считаете наиболее полезным. Вы можете создавать свои запросы в NoSQL JSON или писать прямой синтаксис SQL как пользовательский запрос. В любом случае, Backand рада предоставить инструменты, необходимые для построения вашего приложения так, как вы хотите.