Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
08-10-2021 04:33 AM
Hi All,
I am trying to create a relationship between the below path where all nodes have a date property to other nodes present in my Graph DB with rest of the dates like '2021-05-01' , '2021-06-01' ,,'2021-07-01'etc. but the relationship should be created where every month date is connected to the next month date
I have written this query : Match (a:Storage),(b:Storage)
where b.date=a.date+duration('P1M')
create (a)-[r:impact]->(b)
This works fine and creates the relation between all nodes but I just want to create relation between the nodes shown in the picture to just their next month i.e in the picture date is '2021-04-01' (but it can be any date) so it should be connected to nodes with date '2021-05-01' only and not connected further to '2021-06-01'. I want to limit my relationship creation. Is it possible ? And how to achieve it .
This is the Output that I want
Thanks
08-10-2021 05:58 AM
Hi, if the Storage node that you are trying to connect too already exists you should be able to do something like this:
MATCH (a:Storage)
MATCH (b:Storage {date: a.date+duration('P1M')})
MERGE (a)-[:IMPACT]->(b)
RETURN *
I hope that helps.
08-10-2021 06:29 AM
Hi Sam,
I just tried this what you suggested so this is also creating the relationship between all nodes all dates basis 1 month gap like '2021-04-01' connected to '2021-05-01' and then to '2021-06-01' and so on till '2023-03-01' (max date in my DB). I am getting this
But I just want to stop the relationship creation after 1 relationship between '2021-04-01' and '2021-05-01' .
Can you suggest how to achieve this.
Thanks
08-10-2021 07:34 AM
Ah I see.
Could this be solved then by limiting the a:Storage
node that is returned based on the pattern like so:
MATCH ()-[:TRANSPORTED]->(a:Storage)
MATCH (b:Storage {date: a.date+duration('P1M')})
MERGE (a)-[:IMPACT]->(b)
RETURN *
That way your "a" node will always be one that has been TRANSPORTED
.
08-10-2021 10:21 PM
Thanks Sam, I can make use of your and Benoit's query. This was helpful.
08-10-2021 08:16 AM
So I cannot create it by limiting a:Storage basis TRANSPORTED because the other month Storage nodes like '2021-06-01', '2021-07-01' etc also have TRANSPORTED relationship. Sorry, I didn't mention this before that those months are also separate paths with TRANSPORTED Relation that I have in my DB.
08-10-2021 12:32 PM
One trouble is that in order to have only one relatioship "IMPACT" you should be able to query what you are creating, which is not possible within one query.
A simple solution, even if not the prettiest, would be to run a second query to delete the useless relationship in a chain:
MATCH (a:Storage)-[:IMPACT]->(b:Storage)-[rel:IMPACT*]->(c:Storage)
DELETE rel
08-10-2021 10:20 PM
Thanks Beniot this is helpful.
All the sessions of the conference are now available online