Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在关系创建过程中将特性用作边标签_Database_Neo4j_Cypher - Fatal编程技术网

Database 在关系创建过程中将特性用作边标签

Database 在关系创建过程中将特性用作边标签,database,neo4j,cypher,Database,Neo4j,Cypher,我有以下Neo4j查询: UNWIND [{s:"a"}, {s:"b"}] AS x WITH x MATCH (y:Y {b:"hi"}), (z:Z {b:"hi"}) WITH y, z MERGE (y)-[:x.s]->(z) 其思想是使用x.s作为y和z之间边的标签。但这会引发以下错误: Neo.ClientError.Statement.SyntaxError:输入“”无效:应为 标识符字符、空格“|”、长度规范、 属性映射或']'第7行第14列偏移量:101合并

我有以下Neo4j查询:

UNWIND [{s:"a"}, {s:"b"}] AS x
WITH x

MATCH (y:Y {b:"hi"}), (z:Z {b:"hi"}) 
WITH y, z

MERGE (y)-[:x.s]->(z)
其思想是使用x.s作为y和z之间边的标签。但这会引发以下错误:

Neo.ClientError.Statement.SyntaxError:输入“”无效:应为 标识符字符、空格“|”、长度规范、 属性映射或']'第7行第14列偏移量:101合并 y-[:x.s]>z^


这样做的合适查询是什么?提前感谢

我发现这可以通过apoc.create.relationship过程完成:

UNWIND [{s:"c"}, {s:"d"}] AS x
WITH x

MATCH (y:Y {b:"hi"}), (z:Z {b:"hi"}) 
WITH y, z, x

CALL apoc.create.relationship(y, x.s, {}, z) YIELD rel
RETURN y,z

我会把这个问题留一点时间,看看是否有人能想出更好的方法来解决这个问题。

我发现这可以通过apoc.create.relationship过程来实现:

UNWIND [{s:"c"}, {s:"d"}] AS x
WITH x

MATCH (y:Y {b:"hi"}), (z:Z {b:"hi"}) 
WITH y, z, x

CALL apoc.create.relationship(y, x.s, {}, z) YIELD rel
RETURN y,z
我将把这个问题留一点时间,看看是否有人能想出更好的方法来做这件事。

首先,你在第二个命令中失去了x。其次,当关系类型实际上是变量的值时,不能使用MERGE或create创建关系。您应该改用apoc.create.relationship:

首先,在第二个命令中失去x。其次,当关系类型实际上是变量的值时,不能使用MERGE或create创建关系。您应该改用apoc.create.relationship:

使用,您应该看到此查询需要更少的数据库命中:

MATCH (y:Y {b:"hi"}), (z:Z {b:"hi"})
UNWIND ["c", "d"] AS x
CALL apoc.create.relationship(y, x, {}, z) YIELD rel
RETURN y,z
另外,您应该在:Xb和:Zb上创建以提高性能。

使用,您应该看到此查询需要更少的数据库命中:

MATCH (y:Y {b:"hi"}), (z:Z {b:"hi"})
UNWIND ["c", "d"] AS x
CALL apoc.create.relationship(y, x, {}, z) YIELD rel
RETURN y,z

此外,您应该在:Xb和:Zb上创建以提高性能。

感谢您的回答。我会选你的最好。出于好奇,这是使用create.relationship过程实现这一点的唯一方法吗?还有,程序中的{}是什么?是关系属性吗?谢谢。是,因为在创建关系时无法参数化关系类型。阿菲克:这是唯一的办法。您是否有不喜欢此解决方案的特定需求?是的,关于{}你是正确的。感谢你的回答。我会选你的最好。出于好奇,这是使用create.relationship过程实现这一点的唯一方法吗?还有,程序中的{}是什么?是关系属性吗?谢谢。是,因为在创建关系时无法参数化关系类型。阿菲克:这是唯一的办法。您是否有不喜欢此解决方案的特定需求?是的,关于{}你是对的。我看到的两个区别是c和d不再是属性的值,只是列表中的值。我还看到在这个查询中没有使用WITH。如果我还遗漏了什么,你能解释一下这个查询与之前建议的查询有何不同,为什么它需要更少的DB点击量吗?我使用的东西是:1直觉-如果先放松,比赛可能会执行两次,因此,我交换了这两个子句,并使用PROFILE进行检查,发现了一个差异,尽管这不一定是由于我的预期。2简化,这通常也简化了生成的计划-同样,配置文件显示c/d简化减少了数据库点击。注意:您的结果可能与我的不同,特别是如果您使用的是不同的neo4j版本,因此您应该始终自己运行PROFILE进行检查。我看到的两个差异是c和d不再是属性值,而是列表中的值。我还看到在这个查询中没有使用WITH。如果我还遗漏了什么,你能解释一下这个查询与之前建议的查询有何不同,为什么它需要更少的DB点击量吗?我使用的东西是:1直觉-如果先放松,比赛可能会执行两次,因此,我交换了这两个子句,并使用PROFILE进行检查,发现了一个差异,尽管这不一定是由于我的预期。2简化,这通常也简化了生成的计划-同样,配置文件显示c/d简化减少了数据库点击。注意:您的结果可能与我的不同,特别是如果您使用的是不同的neo4j版本,所以您应该始终自己运行概要文件进行检查。