基于嵌套映射键值对的 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。与其他语言相比,您不必担心编写查询,因为默认情况下它们会被清理。
有两种构建查询的方法:
- 基于关键字的语法(不那么冗长,但是表达式不能通过管道连接在一起)
- 基于管道的语法(允许表达式的管道,用于更复杂的表达式)
基于关键字的查询:
from e in Event,
where: e.fields["status"] == "accepted"
其中 Event
是您的架构。
基于管道的查询:
"events"
|> where([e], e.fields["status"] == "accepted")
其中 events
是 table 名称。
我有以下记录结构:
%Event{
external_id: 379,
type: "abc"
fields: %{
"status" => "accepted",
"other_field" => "123"
}
我如何着手创建一个只能 return 嵌套 "status" == "accepted"
事件的查询?我必须求助于使用原始 SQL 命令,还是有简单的方法?
无需求助于原始 SQL 命令,因为 Ecto 提供了查询 DSL。与其他语言相比,您不必担心编写查询,因为默认情况下它们会被清理。
有两种构建查询的方法:
- 基于关键字的语法(不那么冗长,但是表达式不能通过管道连接在一起)
- 基于管道的语法(允许表达式的管道,用于更复杂的表达式)
基于关键字的查询:
from e in Event,
where: e.fields["status"] == "accepted"
其中 Event
是您的架构。
基于管道的查询:
"events"
|> where([e], e.fields["status"] == "accepted")
其中 events
是 table 名称。