Объединить / создать поверх полного объединения - PullRequest
0 голосов
/ 02 марта 2020

В браузере Neo4j, с кодом:

MATCH  (a:VAR1)<--(s:VARX {id: 'MYID'})-->(b:VAR2) RETURN a, b;

В графическом представлении я вижу только 6 узлов

VAR1 id:A
VAR1 id:B
VAR1 id:C
VAR2 id:X
VAR2 id:Y
VAR2 id:Z

Но в табличном представлении я вижу все возможные комбинации:

VAR1.id VAR2.id
A       X
A       Y
A       Z
B       X
B       Y
B       Z
C       X
C       Y
C       Z

это полное объединение, которое я хочу

однако на основании этого я хотел бы создать узел для каждой отдельной комбинации

VARY
{id1:"A",id2:"X"}
{id1:"A",id2:"Y"}
{id1:"A",id2:"Z"}
{id1:"B",id2:"X"}
{id1:"B",id2:"Y"}
{id1:"B",id2:"Z"}
{id1:"C",id2:"X"}
{id1:"C",id2:"Y"}
{id1:"C",id2:"Z"}

Кроме того, все из этих узлов требуется связь с их двумя исходными узлами

[VARY {id1:"A",id2:"X"}] -FROM-> [VAR1 {id:"A"}]
[VARY {id1:"A",id2:"X"}] -FROM-> [VAR2 {id:"X"}]

Я пробовал так много комбинаций с UNWIND, так много FOREACH, без удачи, любой совет был бы оценен. Спасибо за ваше время.


Лучшее объяснение того, зачем мне это нужно

Мне нужно, чтобы 3 информации были связаны вместе

VAR1 VAR2 VAR3
A    X    M
A    Y    P
A    Z    O
B    X    M
B    Y    Q
B    Z    O
C    X    M
C    Y    R
C    Z    O

Как видите, я нужно в качестве структуры декартово произведение VAR1 и VAR2. Однако VAR3 может содержать разные значения, основанные на каждой комбинации VAR1 и VAR2, правильная визуализация будет фактически в сводной таблице, подобной этой

    X   Y   Z
A   M   P   O
B   M   Q   O   
C   M   R   O 

Going to cypher У меня есть VAR1, VAR2, VAR3, хранящиеся в независимых узлах, чтобы не потерять отслеживаемость соединения. Я создаю узел, соединяющий 3 информации.

В основном, VARX фильтрует эти данные, и у меня есть:

VARX - [TOVAR1] -> VAR1(a)
VARX - [TOVAR1] -> VAR1(b)
VARX - [TOVAR1] -> VAR1(c)

VARX - [TOVAR2] -> VAR2(x)
VARX - [TOVAR2] -> VAR2(y)
VARX - [TOVAR2] -> VAR2(z)

VARX - [TOVAR3] -> VAR3(M)
VARX - [TOVAR3] -> VAR3(O)
VARX - [TOVAR3] -> VAR3(P)
VARX - [TOVAR3] -> VAR3(Q)
VARX - [TOVAR3] -> VAR3(R)

Так что мне для ячейки (1,1) нужно отношение VAR1 (a) и VAR2 (x) и VAR3 (M) должен быть заполнен в другом независимом узле, который может хранить тройку (a, x, m). То же самое для всех пар VAR1_n * VAR2_n (VAR1, VAR2), в данном случае 3 * 3 = 9.

Имеет ли это смысл для вас?

1 Ответ

0 голосов
/ 04 марта 2020

Если вы хотите представить эту таблицу:

VAR1 VAR2 VAR3
A    X    M
A    Y    P
A    Z    O
B    X    M
B    Y    Q
B    Z    O
C    X    M
C    Y    R
C    Z    O

Вы можете использовать модель данных без избыточности с уникальными узлами. Например:

(:Var1)-[:T1]->(:Var3)<-[:T2]-(:Var2)

Вот пример кода Cypher для создания (уникальных) узлов и связей:

UNWIND [
  {id1: 'A', id2: 'X', id3: 'M'},
  {id1: 'A', id2: 'Y', id3: 'P'},
  {id1: 'A', id2: 'Z', id3: 'O'},
  {id1: 'B', id2: 'X', id3: 'M'},
  {id1: 'B', id2: 'Y', id3: 'Q'},
  {id1: 'B', id2: 'Z', id3: 'O'},
  {id1: 'C', id2: 'X', id3: 'M'},
  {id1: 'C', id2: 'Y', id3: 'R'},
  {id1: 'C', id2: 'Z', id3: 'O'}
] AS d
MERGE (v1:Var1 {id: d.id1})
MERGE (v2:Var2 {id: d.id2})
MERGE (v3:Var3 {id: d.id3})
MERGE p1=(v1)-[:T1]->(v3)
MERGE p2=(v2)-[:T2]->(v3)
RETURN p1, p2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...