示例

本节中的示例假设参数$previousChangeId已填充更改标识符,该标识符来自先前查询的结果或使用currentearliest过程。

根据操作类型选择实体

可以过滤更改以仅返回创建、更新或删除,而不管受影响的实体是节点还是关系。

查询
CALL db.cdc.query($previousChangeId, [{
    select: "e",
    operation: "c"
}])

根据已更改的属性选择实体

可以过滤更改以仅包括其中某些属性已更改的更改。如果提供了属性列表,则所有提供的属性都必须在同一更改事件中更改。

查询其中特定属性已更改的实体
CALL db.cdc.query($previousChangeId, [{
    select: "e",
    changesTo: ["name"]
}])
查询其中特定属性已更改的节点
CALL db.cdc.query($previousChangeId, [{
    select: "n",
    changesTo: ["name"]
}])
查询其中特定属性已更改的关系
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    changesTo: ["registerId"]
}])

根据更改元数据选择实体

可以过滤更改以仅包括其中事务匹配特定元数据属性的更改。

查询特定用户更改的实体
CALL db.cdc.query($previousChangeId, [{
    select: "e",
    executingUser: "alice"
}])
查询由模拟其他用户的用户更改的节点
CALL db.cdc.query($previousChangeId, [{
    select: "n",
    authenticatedUser: "alice",
    executingUser: "bob"
}])
查询在事务上设置特定元数据属性时更改的关系
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    txMetadata: {
        correlationId: 123456789
    }
}])

按 elementId 选择节点/关系

可以将更改过滤到特定的 elementId。当您对对特定节点或关系所做的更改感兴趣时,这可能很有用。有关获取现有实体的 elementId 的更多信息,请参阅Cypher 手册→ elementId。避免使用 elementId 而使用业务键,请参阅elementIds 和关键属性的作用了解更多详细信息。

查询节点更改
CALL db.cdc.query($previousChangeId, [{
    select: "n",
    elementId: "4:e239be76-c7e8-43d8-aa03-567de592f426:0"
}])
查询关系更改
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    elementId: "5:a439fca3-d8b3-35f0-aa49-987fa112f993:0"
}])

按键选择实体

可以过滤节点更改以匹配指定的关键属性。提供的关键属性需要完全匹配实体上的相应节点键或关系键。请参阅elementIds 和关键属性的作用了解更多详细信息。

按键查询节点更改
CALL db.cdc.query($previousChangeId, [{
    select: "n",
    key: {
        name: "Kevin",
        surname: "Bacon"
    }
}])
按键查询关系更改
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    key: {
        registerId: 1001
    }
}])

如果在捕获实体上的更改后添加了相关约束,则不会追溯更新先前的更改事件,并且不匹配键选择器。

按标签选择节点

可以将节点更改过滤到特定标签。

查询
CALL db.cdc.query($previousChangeId, [{
    select: "n",
    labels: ["Person", "Actor"]
}])

以上查询仅返回更改前或更改后都具有**两个**标签的节点上的更改。为了获取具有任一标签的节点上的更改,必须指定两个单独的选择器。有关详细信息,请参阅组合选择器

按类型选择关系

可以将关系更改过滤到特定类型。

查询
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    type: "ACTED_IN"
}])

按起始/结束节点选择关系

可以根据关系的起始和结束节点选择关系更改。

查询具有特定标签的起始节点的关系
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    start: {
        labels: ["Person"]
    }
}])
查询特定标签之间的关系
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    start: {
        labels: ["Person"]
    },
    end: {
        labels: ["Movie"]
    }
}])
查询特定标签之间且具有特定类型的关系
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    type: "ACTED_IN",
    start: {
        labels: ["Person"]
    },
    end: {
        labels: ["Movie"]
    }
}])
查询涉及特定节点的关系
CALL db.cdc.query($previousChangeId, [{
    select: "r",
    start: {
        labels: ["Person"],
        key: {
            name: "john",
            surname: "doe"
        }
    }
}, {
    select: "r",
    end: {
        labels: ["Person"],
        key: {
            name: "john",
            surname: "doe"
        }
    }
}])
查询特定标签和类型的节点和关系
CALL db.cdc.query($previousChangeId, [{
    select: "n",
    labels: ["Person"]
}, {
    select: "n",
    labels: ["Movie"]
}, {
    select: "r",
    type: "ACTED_IN",
    start: {
        labels: ["Person"]
    },
    end: {
        labels: ["Movie"]
    }
}, {
    select: "r",
    type: "DIRECTED",
    start: {
        labels: ["Person"]
    },
    end: {
        labels: ["Movie"]
    }
}])