Странное поведение Neo4J Cypher при настройке свойств отношений - PullRequest
0 голосов
/ 24 января 2019

У меня есть запрос 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...