Создание отношений для других свойств пропускается, если свойство равно Null в запросе Cypher - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть запрос шифрования для создания узлов в пакете.

Запрос

UNWIND {batch} as row MERGE(m:TempEncounter {encounterId: row.encounterId}) ON CREATE SET m+=row
WITH m,row MATCH (u:Users {userId:  row.creator }) MERGE (m)-[:USERS]->(u)
WITH m,row MATCH (l:Location {locationId:  row.locationId }) MERGE (m)-[:LOCATION]->(l)
WITH m,row MATCH (p:Patient {patientId:  row.patientId }) MERGE (m)-[:PATIENT]->(p)
WITH m,row MATCH (e:EncounterType {encounterTypeId:  row.encounterType }) MERGE (m)-[:ENCOUNTERTYPE]->(e)
WITH m,row MATCH (u2:Users {userId:  row.voidedBy }) MERGE (m)-[:USERS]->(u2)
return m;

Проблема с приведенным выше запросом шифра состоит в том, что предположим, что locationId равен NULL для строки 1 (но может не иметь значения для другихстрок), тогда отношения, начинающиеся с LOCATION и USERS не будут созданыХотя другие свойства могут отображаться как (voidedBy, enounterType)

Как я могу улучшить свой запрос на шифрование, чтобы он пропускал создание определенных отношений, если их нет в строке, но создавал другие, присутствующие в строке.

Я использую этот запрос для увеличения моих узлов в neo4j.Производительность здесь требуется

1 Ответ

0 голосов
/ 28 сентября 2018

Я не знаю, будет ли этот запрос более производительным или нет, но способ сделать то, что вы хотите, заключается в следующем:

UNWIND {batch} as row 
  MERGE(m:TempEncounter {encounterId: row.encounterId}) 
    ON CREATE SET m+=row
  WITH m,row 
    OPTIONAL MATCH (u:Users {userId:  row.creator })
    FOREACH( node IN filter(x IN [u] WHERE x IS NOT NULL) |
      MERGE (m)-[:USERS]->(node)
    )
  WITH m, row
    OPTIONAL MATCH (l:Location {locationId:  row.locationId })
    FOREACH( node IN filter(x IN [l] WHERE x IS NOT NULL) |
      MERGE (m)-[:LOCATION]->(node)
    )
  ...

Если этот запрос не является достаточно совершенным, вам следует попробоватьразделить этот запрос на несколько частей (по одной для каждого отношения) и выполнить пакет в моем коде, управляя коммитом моей транзакции вручную.

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