在 Neptune 的 OpenCypher 实现中模拟 MERGE
Simulate a MERGE in Neptune's OpenCypher implementation
我正在尝试 运行 使用他们的 new OpenCypher implementation but MERGE
is not yet supported as a clause.
针对 AWS Neptune 数据库进行 MERGE
查询
有没有办法在 Neptune 的 OpenCypher 实现中不使用 MERGE
来获得 MERGE
的行为?
我希望可以这样做:
MATCH (ee:Person {name: "Sam"})
IF ee IS NULL THEN
CREATE ...
ELSE
SET ee += {...}
END
显然这只是伪代码,但是有没有什么方法可以在不在调用的应用程序中处理它的情况下实现这种行为?
openCypher 不提供强大的功能来执行您在伪代码中显示的查询中的逻辑类型。在 MERGE
成为 AWS Neptune 中受支持的子句之前,实现此功能的最佳方法是为此使用 Gremlin 模式,如 here 所述。 Neptune 提供了对存储在 Neptune 中的 属性 图形数据同时使用 openCypher 和 Gremlin(通过驱动程序或通过 HTTPS)的能力。对于你上面的伪代码,Gremlin 等价物看起来像这样:
g.V().
has('Person', 'name', 'Sam').
fold().
coalesce(
addV('NEW LABEL').property('propertyName', 'foo'),
property('updateProperty', 'bar'))
更新 - 从 1.1.0.0 版本的 Amazon Neptune 开始,现在支持 MERGE
子句。
我正在尝试 运行 使用他们的 new OpenCypher implementation but MERGE
is not yet supported as a clause.
MERGE
查询
有没有办法在 Neptune 的 OpenCypher 实现中不使用 MERGE
来获得 MERGE
的行为?
我希望可以这样做:
MATCH (ee:Person {name: "Sam"})
IF ee IS NULL THEN
CREATE ...
ELSE
SET ee += {...}
END
显然这只是伪代码,但是有没有什么方法可以在不在调用的应用程序中处理它的情况下实现这种行为?
openCypher 不提供强大的功能来执行您在伪代码中显示的查询中的逻辑类型。在 MERGE
成为 AWS Neptune 中受支持的子句之前,实现此功能的最佳方法是为此使用 Gremlin 模式,如 here 所述。 Neptune 提供了对存储在 Neptune 中的 属性 图形数据同时使用 openCypher 和 Gremlin(通过驱动程序或通过 HTTPS)的能力。对于你上面的伪代码,Gremlin 等价物看起来像这样:
g.V().
has('Person', 'name', 'Sam').
fold().
coalesce(
addV('NEW LABEL').property('propertyName', 'foo'),
property('updateProperty', 'bar'))
更新 - 从 1.1.0.0 版本的 Amazon Neptune 开始,现在支持 MERGE
子句。