g の定義を where 句に移動することをお勧めします。存在しないノードから開始するとエラーが発生し、クエリを作成フェーズに続行できないためです。「?」に注意してください。Cypher で null 値を処理します。
start n=node:types(id={typeId})
create unique (n)<-[:has_type]-(unit {props})-[:has_group]->(g)
where g.id?={groupId}
return unit
クエリを微調整する必要があるかもしれません。これはテストされていない最初のショットです。
編集:いくつかの試行の後、2 つの異なるクエリを実行する必要があるという結論に達しました。 :
start n=node:types(id={typeId})
create unique (n)<-[:has_type]-(unit {props})
return unit
start unit=node:unitProps({unitPropsValue}) ,g=node:groups(id={groupId})
create unique unit-[:has_group]->g
return g
グループが存在しない場合、2 番目のクエリはエラーで失敗しますが、それでもターゲットに到達するので問題ありません。なんらかの奇妙な理由で、最初のショットで試したように、where 句にいくつかの制限を実装することができませんでした。次のクエリは、単に where 条件を飛び越えているように見えます (おそらくバグ?) が、Cypher の私の理解では、既存のグループと一致する必要がありますが、代わりに新しい g ノードを作成します。
start n=node(1)
create unique n-[:TYPE1]-(uniq {uid:333})
with uniq
create unique uniq-[:TYPE2]->g
where has(g.gid) and g.gid=999
return g