Neo4j шифровальные запросы, подсчет узлов и двусторонние отношения - PullRequest
0 голосов
/ 26 марта 2019

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

Пример:

Nodes: store + customer 
Relationships: sold + bought

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

Я хотел бы вернуть следующее:

  • Название магазина
  • количество проданных и купленных отношений (магазин <-> клиент)
  • количествотолько проданных отношений (магазин -> клиент)
  • количество только купленных отношений (магазин <- клиент) </li>

*** Уточнение:

например,это было бы 10 магазинов с 7-10 покупателями в каждом, и да, в Neo это были бы две разные дуги, соединяющие:

покупатель магазина / корабли

целиЭто посмотреть на различные методы отчетности для каждого магазина, так как некоторые магазины могут сказать, что они продали, когда они этого не сделали, и клиенты могут сказать, что они купили товары.Как часто происходит каждый из этих сценариев?

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Это так просто, как это:

MATCH (n:Customer)
RETURN 
size((n)-[:BOUGHT|:SOLD]-()) AS bothRels,
size((n)-[:BOUGHT]-()) AS boughtRels,
size((n)-[:SOLD]-()) AS soldRels
╒══════════╤════════════╤══════════╕
│"bothRels"│"boughtRels"│"soldRels"│
╞══════════╪════════════╪══════════╡
│2         │1           │1         │
└──────────┴────────────┴──────────┘
0 голосов
/ 26 марта 2019

Вы можете использовать что-то вроде

match (n:Store)<-[r:bought]-(n1:Customer)<-[r1:sold]-(n) with count(distinct r) as verified 
match (n:Store)<-[r:bought]-(n1:Customer) with verified, count(distinct r) - verified as boughtOnly 
match (n:Store)-[r:sold]->(n1:Customer) with verified, boughtOnly, count(distinct r) - verified as soldOnly 
return verified, soldOnly, boughtOnly

См. Фиктивную базу данных здесь для проверки на

EDIT Обновлен запрос с предложением where ивозвращение store информация

match (n:Store) where n.state = 'MA' and n.city = 'Boston' with n as Store
match (Store)<-[r:bought]-(n1:Customer)<-[r1:sold]-(n) with Store, count(distinct r) as verified 
match (Store)<-[r:bought]-(n1:Customer) with Store, verified, count(distinct r) - verified as boughtOnly 
match (Store)-[r:sold]->(n1:Customer) with Store, verified, boughtOnly, count(distinct r) - verified as soldOnly 
return verified, soldOnly, boughtOnly, Store
...