设置关系属性时出现奇怪的Neo4J Cypher行为

时间:2019-01-23 23:20:49

标签: neo4j cypher

我对此类Neo4J有一个Cypher请求:

MATCH (u:User {uid: $userId}) 
UNWIND $contextNames as contextName 
MERGE (context:Context {name:contextName.name,by:u.uid,uid:contextName.uid}) 
ON CREATE SET context.timestamp=$timestamp 
MERGE (context)-[by:BY]->(u) 
SET by.timestamp = $timestamp 

我的参数是:

{
 "userId": "15229100-b20e-11e3-80d3-6150cb20a1b9",
 "contextNames": [
  {
    "uid": "822e2580-1f5e-11e9-9ed0-5b93e8900a78",
    "name": "fnas"
  }
 ],
 "timestamp": "1912811921129"
}

上面的查询设置了8个参数,因为相对于u,我(可能)还有:BY类型的8个其他关系。在我看来这是不合逻辑的,因为它只能在具体的context和具体的u之间找到一种关系,如果不存在则创建它,并为其设置属性

但是,当我这样做时:

 MATCH (u:User {uid: $userId}) 
 UNWIND $contextNames as contextName 
 MERGE (context:Context {name:contextName.name,by:u.uid,uid:contextName.uid}) 
 ON CREATE SET context.timestamp=$timestamp 
 MERGE (context)-[:BY{timestamp:$timestamp}]->(u)

它要么创建一个关系(如果不存在具有相同时间戳的关系),要么根本不执行任何操作(这似乎是正确的行为)。

这种差异的原因是什么? Neo4J中的错误?

0 个答案:

没有答案