Узлы MERGE по полю свойства - PullRequest
0 голосов
/ 31 августа 2018

У меня есть разные узлы, которые совместно используют одно и то же поле свойств, мне нужно объединить эти узлы в один и в то же время скопировать все остальные другие свойства в узле слияния.

пример:

(n1, g, p1) (n2, g, p2) (n3, g, p3) => (n, g, p1, p2, p3)

Важно отметить, что мне не нужны решения apoc, поскольку пользовательские функции не работают в CAPS, с которым я работаю на

обновление:

geohash - это поле с повторяющимися значениями, поэтому я хочу объединить узлы этим полем.

Команда CAPS дала мне этот зашифрованный запрос, чтобы иметь отличные узлы геохеша от начального графа:

  CATALOG CREATE GRAPH temp {
    FROM GRAPH session.inputGraph
    MATCH (n)
    WITH DISTINCT n.geohash AS geohash
    CONSTRUCT 
    CREATE (:HashNode {geohash: geohash})
    RETURN GRAPH
   }

, однако он все еще отсутствует - это набор остальных свойств объединенных узлов.

У меня нет проблем с отношениями, потому что мы можем скопировать их позже из начального графа:

 FROM GRAPH inputGraph
 MATCH (from)-[via]->(to)
 FROM GRAPH temp
 MATCH (n), (m)
 WHERE from.geohash = n. AND  AND to.geohash = m.geohash
 CONSTRUCT 
   CREATE (n)-[COPY OF via]->(m)
 RETURN GRAPH

1 Ответ

0 голосов
/ 31 августа 2018

Это не на 100% возможно в чистом шифре, поэтому для этого есть процедура APOC.

Чтобы объединить два узла, вы должны:

  • создать узел слияния со всеми свойствами
  • для создания всех отношений узлов на слиянии

Для первой части это возможно в cypher. Пример:

MATCH (n) WHERE id(n) IN [106, 68]
WITH collect(n) AS nodes
  CREATE (new:MyNode)
  with nodes, new
  UNWIND nodes as node
    SET new += properties(node)
    RETURN new

Но для второй части вам нужно иметь возможность создавать отношения с динамическим типом и динамическим направлением, а в шифре это недопустимо ...

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