4

neo4jclient でノードを作成するときに一意性を確保する方法はありますか?

このリンクトランザクションは、java とトランザクションを使用してそれを行う方法を示していますが、neo4jclient ではトランザクションのサポートが見られません。次のような明示的な Cypher 文字列クエリを使用してそれを行うことができました。

"start n=node:node_auto_index(name={id}) 
 with count(*) as c 
 where c=0 
 create x={name:{id}} 
 return c"

しかし、これは明らかにハックです。より良い方法はありますか?

4

1 に答える 1

2

トランザクションのサポートは、Neo4j 2.0 およびそれ以降のバージョンの Neo4jClient で提供されます。この問題は作業を追跡しています: https://bitbucket.org/Readify/neo4jclient/issue/91/support-cypher-transactions-integrated

それはあなたにユニークさを与えません...

Neo4j には、このアイデアを自動的に適用するための一意のインデックスはありません。(将来、Neo4j 2.0 ラベルでこれが見られると思いますが、まだです。)

a) 作成しているものが一意であることを認識するか、b) 最初に確認する必要があります。

あなたはBルートを取っているようです。

トランザクションを使用すると、単一のトランザクション アクション内でチェックを行ってから作成できますが、ネットワーク上で複数の呼び出しを行うこともできます。

実際には、書き出された Cypher テキストが優先されます。1 つのステートメントでチェックと作成を行います。これがハックだと思う理由を知りたいです。

次のようなNeo4jClient経由でこのステートメントを実行できます。

var id = 123;
graphClient.Cypher
    .Start(new { n = Node.ByIndexLookup("node_auto_index", "name", id)})
    .With("count(*) as c")
    .Where("c=0")
    .Create("x={0}", new MyType { name = id })
    .Return<Node<MyType>>("c")

Withandステートメントのいくつかは、Whereそれらがよりきれいであればいいのですが、今のところ機能しています。

あなたのシナリオもカバーするかもしれないCypher's CREATE UNIQUEclause もあります。

于 2013-05-12T23:42:21.373 に答える