値の上限と下限
Neo4jを使っていると、ラベルNode
のプロパティyearは必ず1900~2100以内を保っていてほしいな〜〜
といった、プロパティの下限と上限を定めたいときがあります。
Neo4jの性質上、各ノードごとにそのような制約を作ることはできませんが、上限と下限からはみ出していたら強制的に丸め込むということは可能です。
値の丸め込み
以下のような句法を利用します。
MATCH ()-[r:Link]->() SET r.pheromone = CASE WHEN r.pheromone <1.0 THEN 1.0 WHEN r.pheromone > 3.0 THEN 3.0 ELSE r.pheromone end
まず、MATCHで値の上限と下限を求めたいオブジェクト集合を取り出します。
その後、SET構文で値の再設定を行います。
ただし、下限や上限をはみ出していた場合強制的に丸め込みたいため、
CASE文を使い
- WHEN lower_valueよりも下回っているなら lower_valueを設定する
- WHEN upper_valueよりも上回っているなら upper_valueを設定する
- 1, 2でないなら上限と下限の内側のため、そのままのオリジナルの値を返す
を行えば、値の丸め込みを行えます。
最後に
Neo4jはまだ三日ほどしか使っておらず、完全に雰囲気でしか使えていません。(複雑なものは一切知りません...)
間違っている部分がありましたら、ご指摘いただけるとありがたいです!