사이퍼에서 조건부 쿼리를 실행하려고합니다. 아래 예제는 내 예제 쿼리이지만 조건이 true 인 경우에도 새 대화 노드를 만들지 않습니다.apo를 사용하는 neo4j의 조건부 쿼리
WITH ["Ram", "Shyam", "Hari"] as names
WITH names, size(names) AS requiredCount
MATCH (u:User) WHERE u.name IN names
WITH u, requiredCount
MATCH (u)-[:IS_PARTICIPANT]->(c:Conversation)
WITH requiredCount, c, u, count(u) as matches
WHERE requiredCount = matches and size(()-[:IS_PARTICIPANT]->(c)) = requiredCount
WITH u, count(c) as conversationExists
CALL apoc.do.when(conversationExists < 1, 'MERGE (cc:Conversation {_id:
apoc.create.uuid(), createdAt: timestamp()}) RETURN cc', '', {u: u}) YIELD value
RETURN value
마지막으로 필자는 WITH와 WHERE의 한 가지 질문을 이해합니다.하지만 WITH '(userCnt = inputCnt AND size (() - [: IS_PARTICIPANT] -> (c)) = inputCnt) 사용자의 모든 대화가 올바 릅니까? 나는 값이 비쌀 것입니다. 그래서 저는 두 가지 질문을했습니다. 첫 번째 대화는 사용자간에 대화가 있는지 확인하고 두 번째 대화 대화 상자가없는 경우 대화 대화 노드를 만듭니다. – Yalamber
WITH 절은 주어진 사용자의 대화 (모든 사용자가 아님)와 [size() 검사가 효율적입니다] (https://neo4j.com/developer/kb/how-do-i-improve 노드상의 관계 수를 계산하는 성능; 실제로 관계를 확장 할 필요없이 대화 노드에서 IS_PARTICIPANT 관계의 정도를 얻습니다. – InverseFalcon
WHERE 또는 WITH를 사용하는 것에 대해 우려했습니다. WHERE 또는 WITH를 사용하면 동일한 쿼리 비용이 발생합니까? – Yalamber