事件选择器
db.cdc.query
过程支持使用用户提供的选择器筛选返回的更改。
过滤实体
匹配节点和关系的选择器
{
select: "e", (1)
operation: "c", (2)
changesTo: ["name", "title"] (3)
}
除 select
外的所有字段都是可选的。
1 | 选择所有实体的更改。其他有效值为 "n" (节点)和 "r" (关系)。 |
2 | 选择创建实体的更改。其他有效值为 "u" (更新)和 "d" (删除)。 |
3 | 选择影响所有提供属性的更改。 |
过滤节点
仅匹配节点的选择器
{
select: "n", (1)
elementId: "4:b7e35973-0aff-42fa-873b-5de31868cb4a:1", (2)
key: { (3)
property: "value",
otherProperty: "value"
},
labels: ["Person", "Actor"], (4)
operation: "c", (5)
changesTo: ["name", "lastName"] (6)
}
除 select
外的所有字段都是可选的。
1 | 选择节点的更改。其他有效值为 "e" (所有实体)和 "r" (关系)。 |
2 | 选择具有此 elementId 的节点的更改。 |
3 | 选择具有匹配关键属性的节点的更改。仅当在节点上定义了关键约束时才可能进行关键匹配,有关详细信息,请参阅 elementIds 和关键属性的作用。 |
4 | 选择在更改之前或之后具有所有指定标签的节点的更改。 |
5 | 选择创建节点的更改。其他有效值为 "u" (更新)和 "d" (删除)。 |
6 | 选择影响所有指定属性的更改。 |
过滤关系
仅匹配关系的选择器
{
select: "r", (1)
elementId: "4:b7e35973-0aff-42fa-873b-5de31868cb4a:1", (2)
type: "ACTED_IN", (3)
key: { (4)
property: "value",
otherProperty: "value"
},
start: { (5)
select: "n", (6)
elementId: "4:b7e35973-0aff-42fa-873b-5de31868cb4a:1", (7)
key: { (8)
userId: "1001",
name: "John"
},
labels: ["Person", "Actor"] (9)
},
end:{ (10)
select: "n",
elementId: "5:b7e35973-0aff-42fa-873b-5de31878ab4a:3",
key: {
title: "Matrix"
},
labels: ["Movie"]
},
operation: "c", (11)
changesTo: ["name", "lastName"] (12)
}
除 select
外的所有字段都是可选的。
1 | 选择关系的更改。其他有效值为 "e" (所有实体)和 "n" (节点)。 |
2 | 选择具有此 elementId 的关系的更改。 |
3 | 选择具有此类型的关系的更改。 |
4 | 选择具有匹配关键属性的关系的更改。仅当在节点上定义了关键约束时才可能进行关键匹配,有关详细信息,请参阅 elementIds 和关键属性的作用。 |
5 | 选择具有匹配此节点选择器的起始节点的关系。请注意,operation 和 changesTo 在这些节点选择器中无效。 |
6 | 可选地指定这是一个节点选择器。在此处指定 "r" 或 "e" 将导致错误。 |
7 | 选择起始节点具有此 elementId 的关系。 |
8 | 选择起始节点具有这些关键属性的关系。仅当在节点上定义了关键约束时才可能进行关键匹配,有关详细信息,请参阅 elementIds 和关键属性的作用。 |
9 | 选择起始节点在更改之前或之后具有这些标签的关系。 |
10 | 选择具有匹配此节点选择器的结束节点的关系。与 start 相同的架构。 |
11 | 选择创建关系的更改。其他有效值为 "u" (更新)和 "d" (删除)。 |
12 | 选择所有指定属性都受到影响的更改。 |
关系起始和结束节点选择器主要满足常规节点选择器架构。唯一的例外是,您不能在关系起始和结束节点选择器中指定 |
按元数据过滤
所有先前选择器都可以与元数据过滤相结合。
用于元数据值的额外过滤
{
select: "e", (1)
authenticatedUser: "alice", (2)
executingUser: "bob", (3)
txMetadata: { (4)
app: "people",
client: 42
},
//...
}
除 select
外的所有字段都是可选的。
1 | 也可以应用于 "n" 和 "r" 选择器。 |
2 | 选择已验证用户匹配提供值的更改。 |
3 | 选择执行用户匹配提供值的更改。 |
4 | 选择事务元数据键值匹配提供条目的更改。 |
组合选择器
选择器越具体,返回的更改就越少。例如,指定 name
和 surname
作为 changesTo
值,仅返回 name
**和** surname
属性在同一事务中都已更改的更改。
查询更新
name
和 surname
属性的更改CALL db.cdc.query($previousChangeId, [
{select: "n", changesTo: ["name", "surname"]}
])
为了提取 name
**或** surname
属性的更改,请指定两个单独的选择器
查询更新
name
或 surname
属性的更改CALL db.cdc.query($previousChangeId, [
{select: "n", changesTo: ["name"]},
{select: "n", changesTo: ["surname"]}
])