2

Neo4j/Cypher のコレクション内の要素が一意であることを確認する簡単な方法はありますか? コレクションをハッシュセットにするようなものですか?

4

3 に答える 3

2

何をしようとしているかによっては、Cypher でこれを実行できる場合があります。

たとえば、項目が存在しない場合にのみ項目をプロパティに追加したい場合は、いくつかの方法で行うことができます。

この例は、クエリをフィルタリングし、コレクションの変更が変更される唯一のプロパティである場合に役立ちます。

START n=node({id}) WHERE NONE(x IN n.cols WHERE x = {val}) SET n.cols = n.cols + {val} RETURN n;

この次の例は、常にプロパティを変更することになりますが、一意性を確保し、他のプロパティも同時に変更する必要がある場合に便利な方法ですが、副作用として項目の順序が変更されます。

START n=node({id})
WITH n, FILTER(x IN n.cols WHERE x <> {val}) as existingCols 
SET n.cols = existingCols + {val}
RETURN n 
于 2013-11-04T20:01:19.633 に答える
1

エンティティ (ノード/関係) プロパティには の概念がなく、Setキー/値があり、許可される値はプリミティブ/文字列配列です。

同様の機能が必要な場合Setは、データを挿入してこの一意性を強制するのはアプリケーション次第です。

Cypher には、これに対する機能もありません。

于 2013-10-21T19:03:20.873 に答える
-1

cypher では、コレクション ( 12 ) を操作でき、次のようにDISTINCT 修飾子を使用して一意性を確保できます。

...
MATCH (fred)-[:LIKES]->(fruit)<-[:LIKES]-(fruit_friend)
WITH fred, COLLECT(DISTINCT(fruit_friend)) as unique_fruit_friends
...
于 2013-10-21T19:12:11.950 に答える