Сравните данные двух узлов разных меток в Neo4j с некоторым свойством - PullRequest
0 голосов
/ 20 марта 2019
Match(csav:CSAVHierarchy) with csav


Match(cx:CXCustomerHierarchy) with cx

    Optional Match(csav)-[:CSAVCustomerHasChild]->(csa:CSAVHierarchy) where csa._type='CXCustomer' OR csa._type='CXCustomerBU'
    Optional Match(cx)-[:CXCustomerHasChild]->(cxc:CXCustomerHierarchy) where cxc._type='CXCustomer' OR  cxc._type='CXCustomerBU' 
    return
    CASE
    WHEN csa.ssid = cxc.ssid and csa.elementLabel = cxc.elementLabel
    THEN "yes"
    ELSE "No"  END As result

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

где мне не хватает?

Ответы [ 3 ]

3 голосов
/ 20 марта 2019

Вы можете использовать плагин Apoc (см. https://neo4j -contrib.github.io / neo4j-apoc-процедуры ):

Match(n:Person{ssid:"1234"}) with collect(n) as nodes CALL apoc.refactor.mergeNodes(nodes) YIELD node RETURN node
1 голос
/ 03 апреля 2019

Этот запрос может делать то, что вы хотите.Он возвращает уникальные пары cxc и csa, которые проходят все ваши тесты.

MATCH (csa:CSAVHierarchy)
WHERE
  (:CSAVHierarchy)-[:CSAVCustomerHasChild]->(csa) AND
  csa._type='CXCustomer' OR csa._type='CXCustomerBU'
MATCH (cxc:CXCustomerHierarchy)
WHERE
  (:CXCustomerHierarchy)-[:CXCustomerHasChild]->(cxc) AND
  csa.ssid = cxc.ssid AND
  csa.elementLabel = cxc.elementLabel AND
  (cxc._type='CXCustomer' OR  cxc._type='CXCustomerBU')
RETURN cxc, csa

Для повышения производительности вы также должны создать индексы на :CSAVHierarchy(_type) и :CXCustomerHierarchy(_type).

0 голосов
/ 03 апреля 2019

Это решение, которое я придумал

MATCH(cxc:CXCustomerHierarchy)-[:_properties]->(auditnode)-->(spoke)
 where cxc._type='CXCustomer' OR  cxc._type='CXCustomerBU' AND spoke.start_date <= 1554272198875 <= spoke.end_date AND spoke.status = "Confirmed"
 with cxc
 OPTIONAL MATCH (cxc)<-[r:CXCustomerHasChild]-(parent) with cxc
 MATCH(csav:CSAVHierarchy)-[:_properties]->(auditnode)-->(spoke) with cxc,csav
 where csav._type='CXCustomer' OR  csav._type='CXCustomerBU' AND spoke.start_date <= 1554272198875 <= spoke.end_date AND spoke.status = "Confirmed"
 OPTIONAL MATCH (csav)<-[r:CSAVCustomerHasChild]-(parent) with csav,cxc
return 
CASE
WHEN csav.sourceSystemId <> cxc.sourceSystemId , csav.elementLabel <> cxc.elementLabel
THEN csav.elementLabel
ELSE "SIMILAR DATA "  END As result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...