基于嵌套映射键值对的 Where 匹配器的 Ecto 查询

Ecto query with Where matcher based on nested map key-value pair

我有以下记录结构:

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

我如何着手创建一个只能 return 嵌套 "status" == "accepted" 事件的查询?我必须求助于使用原始 SQL 命令,还是有简单的方法?

无需求助于原始 SQL 命令,因为 Ecto 提供了查询 DSL。与其他语言相比,您不必担心编写查询,因为默认情况下它们会被清理。

有两种构建查询的方法:

  1. 基于关键字的语法(不那么冗长,但是表达式不能通过管道连接在一起)
  2. 基于管道的语法(允许表达式的管道,用于更复杂的表达式)

基于关键字的查询:

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

其中 Event 是您的架构。

基于管道的查询:

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

其中 events 是 table 名称。