事件选择器

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 选择具有匹配此节点选择器的起始节点的关系。请注意,operationchangesTo 在这些节点选择器中无效。
6 可选地指定这是一个节点选择器。在此处指定 "r""e" 将导致错误。
7 选择起始节点具有此 elementId 的关系。
8 选择起始节点具有这些关键属性的关系。仅当在节点上定义了关键约束时才可能进行关键匹配,有关详细信息,请参阅 elementIds 和关键属性的作用
9 选择起始节点在更改之前或之后具有这些标签的关系。
10 选择具有匹配此节点选择器的结束节点的关系。与 start 相同的架构。
11 选择创建关系的更改。其他有效值为 "u"(更新)和 "d"(删除)。
12 选择所有指定属性都受到影响的更改。

关系起始和结束节点选择器主要满足常规节点选择器架构。唯一的例外是,您不能在关系起始和结束节点选择器中指定 operationchangesTo 字段。

按元数据过滤

所有先前选择器都可以与元数据过滤相结合。

用于元数据值的额外过滤
{
  select: "e", (1)
  authenticatedUser: "alice", (2)
  executingUser: "bob", (3)
  txMetadata: { (4)
    app: "people",
    client: 42
  },
  //...
}

select 外的所有字段都是可选的。

1 也可以应用于 "n""r" 选择器。
2 选择已验证用户匹配提供值的更改。
3 选择执行用户匹配提供值的更改。
4 选择事务元数据键值匹配提供条目的更改。

组合选择器

选择器越具体,返回的更改就越少。例如,指定 namesurname 作为 changesTo 值,仅返回 name **和** surname 属性在同一事务中都已更改的更改。

查询更新 namesurname 属性的更改
CALL db.cdc.query($previousChangeId, [
    {select: "n", changesTo: ["name", "surname"]}
])

为了提取 name **或** surname 属性的更改,请指定两个单独的选择器

查询更新 namesurname 属性的更改
CALL db.cdc.query($previousChangeId, [
    {select: "n", changesTo: ["name"]},
    {select: "n", changesTo: ["surname"]}
])