Re: [Neo4j] neo4j 4.1.3 -> Where condition with count not working as expected

2020-12-07 Thread 'Shanthi Viswanathan' via Neo4j
Thanks much Michael - your explanation makes sense.

I am using dynamic relationship because this is part of a cypher where my
role  (the "Test" I have in my example) is dynamic.

On Mon, Dec 7, 2020 at 7:02 AM 'Michael Hunger' via Neo4j <
neo4j@googlegroups.com> wrote:

> Best to send questions like this to community.neo4j.com
>
> In general if you aggregate, you must not add the thing you want to count
> / aggregate on as an aggregation key, you can use collect on those.
>
> MATCH (echk:REC {id: 'abcdef'})
> OPTIONAL MATCH (p:Person) WHERE p.name CONTAINS 'Shirley'
> WITH collect(p) as people, echk, count(p) as personcnt where personcnt=1
> UNWIND people as p
> MERGE (p)-[:TEST]->(echk)
>
> You don't need apoc.merge.relationship for your case you can just use
> cypher.
>
>
>
> Join our new Community Site & Forum <https://community.neo4j.com>
>
>
> On Mon, Dec 7, 2020 at 12:55 PM 'Shanthi Viswanathan' via Neo4j <
> neo4j@googlegroups.com> wrote:
>
>> I am using neo4j 4.1.3. I have 2 labels : Person and Rec. I need to
>> create a relationship between these 2 only when there exists exactly one
>> person with that last name. When I run the below, relationships are created
>> for all persons with that last name. My code is below:
>>
>> MATCH (echk:REC {id: 'abcdef'}) OPTIONAL MATCH (p:Person) WHERE p.name
>> CONTAINS 'Shirley' WITH p, echk, count(p) as personcnt where personcnt=1
>> CALL apoc.merge.relationship(p, 'Test', {}, {}, echk, {}) YIELD rel RETURN
>> p, echk, rel
>>
>> I have 33 people with "Shirley' and 33 relationships are getting created
>> with that REC. However, there should be no relationship because personcnt
>> <> 1. When I just write
>> OPTIONAL MATCH (p:Person) WHERE p.name CONTAINS 'Shirley'  return
>> count(p) -> I get 33 as the value. I am not sure why my where condition is
>> not kicking in.
>>
>>
>> --
>> 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 neo4j+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/neo4j/9f5043ee-fec0-4f0b-94e4-85d9b6ee8a45n%40googlegroups.com
>> <https://groups.google.com/d/msgid/neo4j/9f5043ee-fec0-4f0b-94e4-85d9b6ee8a45n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> 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 neo4j+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/neo4j/CAKZwuWkzsZDo0pXf1FFyshohXFqOd2%2BAjDimCfGyU0v8q7QjFQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/neo4j/CAKZwuWkzsZDo0pXf1FFyshohXFqOd2%2BAjDimCfGyU0v8q7QjFQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 neo4j+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/neo4j/CAC8vypZXEd6p%2Bgvdic_i_Odhw2022C8iAOVF_ZpeL2Q-%2BLiGRQ%40mail.gmail.com.


[Neo4j] neo4j 4.1.3 -> Where condition with count not working as expected

2020-12-07 Thread &#x27;Shanthi Viswanathan&#x27; via Neo4j
I am using neo4j 4.1.3. I have 2 labels : Person and Rec. I need to create 
a relationship between these 2 only when there exists exactly one person 
with that last name. When I run the below, relationships are created for 
all persons with that last name. My code is below: 

MATCH (echk:REC {id: 'abcdef'}) OPTIONAL MATCH (p:Person) WHERE p.name 
CONTAINS 'Shirley' WITH p, echk, count(p) as personcnt where personcnt=1 
CALL apoc.merge.relationship(p, 'Test', {}, {}, echk, {}) YIELD rel RETURN 
p, echk, rel

I have 33 people with "Shirley' and 33 relationships are getting created 
with that REC. However, there should be no relationship because personcnt 
<> 1. When I just write 
OPTIONAL MATCH (p:Person) WHERE p.name CONTAINS 'Shirley'  return count(p) 
-> I get 33 as the value. I am not sure why my where condition is not 
kicking in. 
 

-- 
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 neo4j+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/neo4j/9f5043ee-fec0-4f0b-94e4-85d9b6ee8a45n%40googlegroups.com.


[Neo4j] I need to match using 4 different logic in a sequence each time a match is not found. How can I accomplish this?

2020-11-25 Thread &#x27;Shanthi Viswanathan&#x27; via Neo4j
I have 2 nodes employees and contractors. I get a name either with id or 
not. If I get the id then match on id and if not match on name. First match 
is against employees followed by contractor.  If I do not get a match then 
do a fuzy match with the name first for employee node and then contractor 
node.

WITH row WHERE row.CREATED_BY <> 'None' 
  CALL apoc.when(row.CREATED_BY_NTID IS NOT NULL, 
"MATCH (p:Employee {name: row.CREATED_BY}) WHERE p.account ENDS 
WITH row.CREATED_BY_NTID return p", 
"MATCH (p:Employee {name: row.CREATED_BY}) return p", {row:row}) 
yield value 
With row, value.p as p 
   IF value.p IS null 
   CALL apoc.when(row.CREATED_BY_NTID IS NOT NULL, 
 "MATCH (p:Contractor {name: row.CREATED_BY}) WHERE p.account ENDS 
WITH row.CREATED_BY_NTID return p", 
 "MATCH (p:Contractor {name: row.CREATED_BY}) return p", {row:row}) yield 
value 
With row, value.p as p 
 IF value.p IS null match (p:Employee) where p.name starts with 'XXX' 
return p  

-- 
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 neo4j+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/neo4j/6318ef6b-465b-46e3-beb4-d638eeec6982n%40googlegroups.com.