Экто-запрос с помощью сопоставления Where на основе пары ключ-значение вложенной карты - PullRequest
0 голосов
/ 09 января 2020

У меня следующая структура записи:

%Event{
  external_id: 379, 
  type: "abc"
  fields: %{
    "status" => "accepted",
    "other_field" => "123"
}

Как мне go создать запрос, который я могу вернуть только в событиях с вложенным "status" == "accepted"? Нужно ли прибегать к использованию сырых SQL команд или есть простой способ?

1 Ответ

4 голосов
/ 09 января 2020

Нет необходимости прибегать к необработанным командам SQL, поскольку Ecto предоставляет DSL-запрос. По сравнению с другими языками вам не нужно беспокоиться о написании запросов, так как по умолчанию они очищаются.

Существует 2 подхода к созданию запросов:

  1. Синтаксис на основе ключевых слов (менее многословный) , однако выражения не могут быть переданы вместе)
  2. Синтаксис на основе конвейера (разрешает конвейеризацию выражения, используется для более сложных выражений)

Запрос на основе ключевого слова:

from e in Event,
  where: e.fields["status"] == "accepted"

где Event - ваша схема.

Запрос на основе канала:

"events"
|> where([e], e.fields["status"] == "accepted")

, где events - имя таблицы.

...