Как узнать, имеет ли Узел x каждый экземпляр узла z, где он имеет много отношений с другим узлом y, который имеет одно отношение к другому узлу z? - PullRequest
0 голосов
/ 10 мая 2018

Итак, у меня есть узел :Customer, который имеет множество узлов :Order, и :Order имеет 1 отношение к узлу :Shipper, называемое :SHIP_VIA, здесь есть иерархия:

(customer:Customer)-[:PURCHASED]->(order)-[:SHIP_VIA]->(shipper:Shipper)

теперь есть только 3 грузоотправителя, и на них указывают Заказы, и у клиента будет много заказов. Поэтому мой вопрос как получить всех клиентов, которые отправили со всеми грузоотправителями? Обратите внимание, что у каждого грузоотправителя есть атрибут shipperID внутри. вот мой код, но он не работает, за исключением одного "где существует"

match (customer:Customer)-[:PURCHASED]->(order)-[:SHIP_VIA]->(shipper:Shipper) 

WHERE exists((customer)-[:PURCHASED]->(order)-[:SHIP_VIA]->(:Shipper 

{shipperID:1})) and exists((customer)-[:PURCHASED]->(order)-[:SHIP_VIA]->

(:Shipper {shipperID:2})) and exists((customer)-[:PURCHASED]->(order)-

[:SHIP_VIA]->(:Shipper {shipperID:3})) return  customer, order , shipper;

Ответы [ 2 ]

0 голосов
/ 10 мая 2018
  1. Рассчитать общее количество грузоотправителей
  2. Для каждого клиента убедитесь, что количество уникальных грузоотправителей равно общему количеству грузоотправителей

MATCH (shipper:Shipper) 
WITH count(shipper) AS totalShippers

MATCH (customer:Customer)-[:PURCHASED]->(order)-[:SHIP_VIA]->(shipper:Shipper)
WITH totalShippers, customer, 
     COUNT(DISTINCT shipper) as shippers WHERE totalShippers = shippers

RETURN customer
0 голосов
/ 10 мая 2018

Попробуйте это решение, используя функции collect () и all () :

// match all shippers
match (shipper:Shipper)
// create a list containing all shippers and pass to the next context
with collect(shipper) as shippers

// match all customers which has purchased an order with each shipper
match (customer:Customer)
where all (shipper in shippers where (customer)-[:PURCHASED]->(:Order)-[:SHIP_VIA]->(shipper))

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