소프트웨어 시스템 내에 조직과 응용 프로그램이 있습니다. 사용자 조치는 로그 레코드를 생성합니다. 로그 레코드 (녹색)는 조직에 속하고 (빨간색) 응용 프로그램에 속할 수 있습니다 (분홍색).cypher의 선택적 관계 매개 변수로 필터링하는 방법은 무엇입니까?
매개 변수의 다양한 세트 (등 작성 시간, 저자, 조직)에 의해 로그 레코드를 필터링 할 필요가있다. 이 매개 변수가 지정되지 않은 경우 로그 레코드가 속한 응용 프로그램에 의해 로그 레코드를 필터링하고 시스템의 모든 로그 레코드를 등록하십시오. 이렇게하려면 다음 쿼리를 만들었습니다.
MATCH
(log0:Log)-[:GENERATED_IN]->(org:Organization),
(a1:Application)<-[:GENERATED_IN]-(log1:Log)
WHERE ID(a)=coalesce({applicationID}, ID(a))
RETURN DISTINCT
CASE {applicationID}
WHEN null THEN log0
ELSE log1
END
as result
매개 변수가 선택 사항이므로 지정하지 않으면 상황을 처리해야합니다. 이 경우 ID(a)=coalesce({applicationID}, ID(a))
을 사용하기로 결정했는데 applicationID
매개 변수가 지정되지 않은 경우 ID(a)=ID(a)
과 같을 것입니다 (이 매개 변수로 필터링하지 않기 때문에 실제로 달성 할 내용).
선택적 관계로이 필터링을 수행하는보다 세련된 방법이 있는지 궁금합니다. 나는
MATCH
(a:Application)<-[:GENERATED_IN*0..1]-(log:Log)-[:GENERATED_IN]->(org:Organization)
WHERE ID(a)=coalesce({applicationID}, ID(a))
RETURN
log
을 시도 또한
OPTIONAL MATCH
와 쿼리를 시도했지만 성공하지. 개선을위한 제안을 부탁드립니다.
그리고 BTW, neo4j 브라우저 콘솔에서 {applicationID}
과 같은 매개 변수를 지정하는 방법이 있습니까? <query>, {applicationID}=202175
처럼. 매번 수동으로 값을 대체합니다.
"매개 변수를 지정하는 방법이 있습니까 [...]?" 잘 알려지지는 않지만,': param' 명령이 있습니다. https://stackoverflow.com/questions/42397773/neo4j-what-is-the-syntax-to-set-cypher-query-parameters-in-the-browser-interfac를 참조하십시오. –