У меня есть запрос Cypher для Neo4J такого типа:
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 параметров, потому что у меня есть (вероятно) 8 другихотношения типа: BY по отношению к этому u
.Это кажется мне нелогичным, так как он должен найти только одну связь между конкретным 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?