我对此类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中的错误?