MERGE without arrows were added and will be available in the next release. Until then try to replace that last merge with CREATE UNIQUE
Michael Am 20.02.2014 um 23:30 schrieb Ben Titmarsh <[email protected]>: > I'd bluffed myself into thinking that I'd solved this but actually I hadn't. > This is my cypher: > > MATCH (fromCard:Card { name: {fromCardName}}),(toCard:Card{ name: > {toCardName}}) > MERGE (fromCard:Card)-[r:DECK_INCIDENCE]->(toCard:Card) > SET r.passCount = coalesce(r.passCount, 0) +1 > > For each pair of cards I end up creating a relationship in both directions, > for example the first time fromCard='HEARTS' and toCard='SPADES', > HEARTS->SPADES is created with passCount 1, then when fromCard='SPADES' and > toCard='HEARTS' SPADES->HEARTS is created with passCount 1. The desired > behaviour is that there is only one "bidirectional" relationship. The > direction is really not important, all I'm modelling is the strength of the > relationship i.e. the number of times that this combination of cards is > "passed" (note that I've used Hearts and Spades here purely for explanation, > I in fact have ~20k domain-specific cards) > > I tried without the arrow > > MATCH (fromCard:Card { name: {fromCardName}}),(toCard:Card{ name: > {toCardName}}) > MERGE (fromCard:Card)-[r:DECK_INCIDENCE]-(toCard:Card) > SET r.passCount = coalesce(r.passCount, 0) +1 > > but that gives me: Only directed relationships are supported in CREATE, while > MATCH allows to ignore direction. > > So I'm stuck here. It's important that relationships are created lazily, > i.e. the first time a 'pass' is registered, as for may pairs of cards they > will never be related at all. So how can I use the semantics of a merge to > create a relationship where the property passCount can be incremented (or > coalesced if null) regardless of the direction? > > > > On Wednesday, February 12, 2014 12:55:19 PM UTC, Peter Neubauer wrote: > Cool Ben. > > G: neubauer.peter > S: peter.neubauer > P: +46 704 106975 > L: http://www.linkedin.com/in/neubauer > T: @peterneubauer > > Neo4j 2.0.0 - (graphs)-[:FOR]->(everyone) > Kids LAN creative party in Malmö - Kidscraft ICE > > > On Wed, Feb 12, 2014 at 1:45 PM, Ben Titmarsh <[email protected]> wrote: > > Ah my mistake! Didn't qualify my match with the property that I was > > matching on! This works: > > > > MATCH (fromCard:Card { name: {fromCardName}}),(toCard:Card{ name: > > {toCardName}}) > > > > MERGE (fromCard:Card)-[r:DECK_INCIDENCE]->(toCard:Card) > > SET r.deckCount = coalesce(r.deckCount, 0) +1 > > > > On Wednesday, February 12, 2014 11:56:32 AM UTC, Ben Titmarsh wrote: > >> > >> Hi Guys, > >> > >> I am aware that Neo4J doesn't have a concept of a bidirectional > >> relationship and I believe that's causing me a problem when using MERGE. > >> Here is my Cypher: > >> > >> MATCH (fromCard:Card),(toCard:Card) > >> MERGE (fromCard:Card)-[r:DECK_INCIDENCE]->(toCard:Card) > >> SET r.deckCount = coalesce(r.deckCount, 0) +1 > >> > >> So say I have a collection of 4 cards: > >> "Hearts","Diamonds","Clubs","Spades" > >> > >> The first time I create the relationship between Hearts and Diamonds, i.e. > >> Hearts -> Diamonds. However, the next time the cards are in a different > >> order and when I attempt to MERGE Diamonds -> Hearts a new relationship is > >> created because no relationship exists in that direction. This is not > >> what > >> I want, I need to increment the deckCount property on the relationship > >> regardless of the direction and don't want to have to manage two > >> relationships per card. > >> > >> I cannot guarantee the order of cards and in essence I need to model a > >> Bidirectional Relationship. How can I achieve what I need using MERGE? > >> > >> Cheers, > >> Ben. > > > > -- > > You received this message because you are subscribed to the Google Groups > > "Neo4j" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to [email protected]. > > For more options, visit https://groups.google.com/groups/opt_out. > > -- > You received this message because you are subscribed to the Google Groups > "Neo4j" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
