1

私はNeo4jとNeo4jClientにかなり慣れていないので、まだ存在しない場合は関係を作成するために流暢なCypherを書き始めたところです。Neo4jClient wiki の例は 2.0 用のように見えるため、Neo4j 2.0 ベータ版を実行しています。

実行すると、次のエラーが表示されます。

SyntaxException: Parenthesis are required to identify nodes in patterns
"CREATE UNIQUE app-[:APP_OF]->{root}"
                  ^

^ は app の後のハイフンを指します。

誰かが私が間違ったことを教えてくれたら幸いです。

これは、アプリがまだ存在しない場合はアプリを作成し、存在しない場合は関係を作成する 2 つのサイファー クエリです。

// Create App
client.Cypher
.Merge("(app:App {Id: {id}})")
.OnCreate("app")
.Set("app = {newApp}")
.WithParams(new { id = a.Id, newApp = a })
.ExecuteWithoutResults();

// Create Relationship
client.Cypher
.Match("(app:App)")
.Where((App app) => app.Id == a.Id)
.CreateUnique("app-[:APP_OF]->{root}") // this is the error line
.WithParam("root", client.RootNode)
.ExecuteWithoutResults();

これらを 1 つのクエリに結合する方法もあるのだろうか。

そして、わざわざルート ノードに接続する必要がありますか、それとも App ノードをフロートさせても問題ありませんか。開始ノードが不要になったことは理解していますが、ルートへの接続は不要ですか? ただし、他の関係にはこのコードが必要です。

助けてくれて本当にありがとうございます :)

編集:これは、https://github.com/Readify/Neo4jClient/wiki/cypher-examplesから従った例です

graphClient.Cypher
  .Match("(user1:User)", "(user2:User)")
  .Where((User user1) => user1.Id == 123)
  .AndWhere((User user2) => user2.Id == 456)
  .CreateUnique("user1-[:FRIENDS_WITH]->user2")
  .ExecuteWithoutResults();
4

2 に答える 2

1

この問題は、パラメーターを提供する方法です。

.CreateUnique("app-[:APP_OF]->{root}")
.WithParam("root", client.RootNode)

そのようなノード参照を渡すことはできません。

STARTノードをクエリに取り込むには、句を使用する必要があります。

client.Cypher
    .Start(new { root = client.RootNode })
    .Match("(app:App)")
    .Where((App app) => app.Id == a.Id)
    .CreateUnique("app-[:APP_OF]->root")
    .ExecuteWithoutResults();

さて、それらの組み合わせに関する次の質問に答えると、これはうまくいくはずです:

client.Cypher
    .Start(new { root = client.RootNode })
    .Merge("(app:App {Id: {id}})")
    .OnCreate("app")
    .Set("app = {newApp}")
    .CreateUnique("app-[:APP_OF]->root") // this is the error line
    .WithParams(new { id = a.Id, newApp = a })
    .ExecuteWithoutResults();

(注:私はそれを実行しようとはしていません:ここに入力しただけです。)

ただし、使用したくない場合client.RootNode。これは、2.0 で廃止された参照ノードの API です: http://docs.neo4j.org/chunked/milestone/deprecations.html。ラベルを作成する前に必要なのはルート ノードだけでした。このシナリオでは、将来すべてのアプリ ノードを再度検索できるようにそれを使用しているように見えますが、現在はラベルに基づいてそれらを検索できるため、その必要はありません。

于 2013-11-07T01:53:25.993 に答える