Neo4jを使った簡単な例

Neo4jのバージョン

このページの例のほとんどは、彼らはスキップして、心の中でのNeo4j 2.0で書かれているSTART句を、とのような句を使用しますMERGEこのページの焦点は、しかしサイファー・ツー・C#の構文についてです、そしてあなたがC#にのNeo4j 1.9クエリを翻訳するうえでも同様に有用です。

一日の終わりに、あなたは常に、作業サイファークエリを開始する必要があり、その後同等のC#をうまく。

さらにヘルプが必要ですか?

あなたが作業サイファークエリを持っていますが、C#1にそれを翻訳することができない場合は、ちょうどに投稿http://stackoverflow.com/questions/tagged/neo4jclient、私たちはかなり迅速にあなたを助けるでしょう。

我々は答えを持っていたら、それは他の人々を助けそれでは、私たちも、このページに追加することができます。

Userクラス

以下の例のほとんどは、ユーザノードの構造を表現するために、あなたは以下のクラスを持っていると仮定します。

public class User
{
    public long Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

ラベルによって、すべてのユーザーを取得します。

このサイファー:

MATCH (user:User)
RETURN user

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Return(user => user.As<User>())
    .Results

特定のユーザーを取得

このサイファー:

MATCH (user:User)
WHERE user.Id = 1234
RETURN user

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 1234)
    .Return(user => user.As<User>())
    .Results

ユーザー、および彼らの友人の数を取得します。

このサイファー:

OPTIONAL MATCH (user:User)-[FRIENDS_WITH]-(friend:User)
WHERE user.Id = 1234
RETURN user, count(friend) AS NumberOfFriends

このC#があります:

graphClient.Cypher
    .OptionalMatch("(user:User)-[FRIENDS_WITH]-(friend:User)")
    .Where((User user) => user.Id == 1234)
    .Return((user, friend) => new {
        User = user.As<User>(),
        NumberOfFriends = friend.Count()
    })
    .Results

ユーザー、およびすべての彼らの友人を取得

このサイファー:

OPTIONAL MATCH (user:User)-[FRIENDS_WITH]-(friend:User)
WHERE user.Id = 1234
RETURN user, collect(friend) AS NumberOfFriends

このC#があります:

graphClient.Cypher
    .OptionalMatch("(user:User)-[FRIENDS_WITH]-(friend:User)")
    .Where((User user) => user.Id == 1234)
    .Return((user, friend) => new {
        User = user.As<User>(),
        Friends = friend.CollectAs<User>()
    })
    .Results

ユーザーを作成します。

このサイファー:

CREATE (user:User { Id: 456, Name: 'Jim' })

パラメータを使用する必要があります。

CREATE (user:User {newUser})

そして、このC#のです:

var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
    .Create("(user:User {newUser})")
    .WithParam("newUser", newUser)
    .ExecuteWithoutResults();

私たちは、明示的に名前付きパラメータ(使用していることに注意してくださいnewUser)、クエリ、およびWithParamそれを供給するための方法を。これは、安全な私たちのエンコーディングを保持サイファー・インジェクション攻撃から保護し、クエリプランをキャッシュできるようにすることにより、パフォーマンスを向上させます。

彼らはまだ存在しない場合にのみ、ユーザーを作成します。

このサイファー:

MERGE (user:User { Id: 456 })
ON CREATE user
SET user.Name = 'Jim'

パラメータを使用する必要があります。

CREATE (user:User { Id: {id} })
ON CREATE user
SET user = {newUser}

そして、このC#のです:

var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
    .Merge("(user:User { Id: {id} })")
    .OnCreate()
    .Set("user = {newUser}")
    .WithParams(new {
        id = newUser.Id,
        newUser
    })
    .ExecuteWithoutResults();

ユーザーを作成し、既存のものにそれらを関連付けます

このサイファー:

MATCH (invitee:User)
WHERE invitee.Id = 123
CREATE invitee-[:INVITED]->(invited:User {newUser})

このC#があります:

var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
    .Match("(invitee:User)")
    .Where((User invitee) => invitee.Id == 123)
    .Create("invitee-[:INVITED]->(invited:User {newUser})")
    .WithParam("newUser", newUser)
    .ExecuteWithoutResults();

2人の既存のユーザーを関連付けます

このサイファー:

MATCH (user1:User), (user2:User)
WHERE user1.Id = 123, user2.Id = 456
CREATE user1-[:FRIENDS_WITH]->user2

このC#があります:

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

彼らはすでに関連していない場合にのみ、2人の既存のユーザーを関連付けます

このサイファー:

MATCH (user1:User), (user2:User)
WHERE user1.Id = 123, user2.Id = 456
CREATE UNIQUE user1-[:FRIENDS_WITH]->user2

このC#があります:

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();

ユーザーに単一のプロパティを更新します。

このサイファー:

MATCH (user:User)
WHERE user.Id = 123
SET user.Age = 25

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 123)
    .Set("user.Age = {age}")
    .WithParam("age", 25)
    .ExecuteWithoutResults();

注意:我々は、データを渡すために、再度パラメータを使用しています。決してのような文字列の連結を経由してこれを実行しないSet("user.Age = " + age.ToString())そうでなければ、エンコードのバグ、セキュリティリスクを導入し、大幅のNeo4j自体にクエリプランのキャッシュをバイパスすることによって、クエリのパフォーマンスに影響を与えます。

ユーザーのすべてのプロパティを置き換え

このサイファー:

MATCH (user:User)
WHERE user.Id = 123
SET user = { Id: 123, Age: 25, Email: '[email protected]' }

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 123)
    .Set("user = {tatham}")
    .WithParam("tatham", new User { Id = 123, Age = 25, Email = "[email protected]" })
    .ExecuteWithoutResults();

ユーザーを削除します。

このサイファー:

MATCH (user:User)
WHERE user.Id = 123
DELETE user

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 123)
    .Delete("user")
    .ExecuteWithoutResults();

ユーザーとすべてのインバウンド関係を削除します。

このサイファー:

OPTIONAL MATCH (user:User)<-[r]-()
WHERE user.Id = 123
DELETE r, user

このC#があります:

graphClient.Cypher
    .OptionalMatch("(user:User)<-[r]-()")
    .Where((User user) => user.Id == 123)
    .Delete("r, user")
    .ExecuteWithoutResults();

特定のユーザーのすべてのラベルを取得します。

このサイファー:

MATCH (user:User)
WHERE user.Id = 1234
RETURN labels(user)

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 1234)
    .Return(user => user.Labels())
    .Results

特定のユーザーのすべてのラベルを取得し、まだユーザーあまりにも

このサイファー:

MATCH (user:User)
WHERE user.Id = 1234
RETURN user, labels(user)

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 1234)
    .Return(user => new {
        User = user.As<User>(),
        Labels = user.Labels()
    })
    .Results

ユーザーを取得し、その後、ユーザーとリターンにこの番号を追加する彼らの友人を数えます。

注:これはのNeo4j 3.0ストアドプロシージャを使用した例です。オブジェクトにプロパティを追加する他の方法があり、これは使用し、CALL、歩留まりの一例でAPOCのNeo4jストアドプロシージャ

このサイファー:

MATCH (user:User)
WHERE user.Id = 1234
WITH user, size((user)-[:IS_FRIENDS_WITH]->(:Friend)) as numberOfFriends
CALL apoc.map.setKey(user, 'numberOfFriends', numberOfFriends) YIELD value AS userWithFriends
RETURN userWithFriends

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 1234)
    .With("user, size((user)-[:IS_FRIENDS_WITH]->(:Friend)) as numberOfFriends")
    .Call("apoc.map.setKey(user, 'numberOfFriends', numberOfFriends)").Yield("value AS userWithFriends")
    .Return(userWithFriends => new {
        User = userWithFriends.As<User>()
    })
    .Results
オリジナル住所ます。https://www.cnblogs.com/ulex/p/6066083.html

Neo4jのバージョン

このページの例のほとんどは、彼らはスキップして、心の中でのNeo4j 2.0で書かれているSTART句を、とのような句を使用しますMERGEこのページの焦点は、しかしサイファー・ツー・C#の構文についてです、そしてあなたがC#にのNeo4j 1.9クエリを翻訳するうえでも同様に有用です。

一日の終わりに、あなたは常に、作業サイファークエリを開始する必要があり、その後同等のC#をうまく。

さらにヘルプが必要ですか?

あなたが作業サイファークエリを持っていますが、C#1にそれを翻訳することができない場合は、ちょうどに投稿http://stackoverflow.com/questions/tagged/neo4jclient、私たちはかなり迅速にあなたを助けるでしょう。

我々は答えを持っていたら、それは他の人々を助けそれでは、私たちも、このページに追加することができます。

Userクラス

以下の例のほとんどは、ユーザノードの構造を表現するために、あなたは以下のクラスを持っていると仮定します。

public class User
{
    public long Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

ラベルによって、すべてのユーザーを取得します。

このサイファー:

MATCH (user:User)
RETURN user

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Return(user => user.As<User>())
    .Results

特定のユーザーを取得

このサイファー:

MATCH (user:User)
WHERE user.Id = 1234
RETURN user

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 1234)
    .Return(user => user.As<User>())
    .Results

ユーザー、および彼らの友人の数を取得します。

このサイファー:

OPTIONAL MATCH (user:User)-[FRIENDS_WITH]-(friend:User)
WHERE user.Id = 1234
RETURN user, count(friend) AS NumberOfFriends

このC#があります:

graphClient.Cypher
    .OptionalMatch("(user:User)-[FRIENDS_WITH]-(friend:User)")
    .Where((User user) => user.Id == 1234)
    .Return((user, friend) => new {
        User = user.As<User>(),
        NumberOfFriends = friend.Count()
    })
    .Results

ユーザー、およびすべての彼らの友人を取得

このサイファー:

OPTIONAL MATCH (user:User)-[FRIENDS_WITH]-(friend:User)
WHERE user.Id = 1234
RETURN user, collect(friend) AS NumberOfFriends

このC#があります:

graphClient.Cypher
    .OptionalMatch("(user:User)-[FRIENDS_WITH]-(friend:User)")
    .Where((User user) => user.Id == 1234)
    .Return((user, friend) => new {
        User = user.As<User>(),
        Friends = friend.CollectAs<User>()
    })
    .Results

ユーザーを作成します。

このサイファー:

CREATE (user:User { Id: 456, Name: 'Jim' })

パラメータを使用する必要があります。

CREATE (user:User {newUser})

そして、このC#のです:

var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
    .Create("(user:User {newUser})")
    .WithParam("newUser", newUser)
    .ExecuteWithoutResults();

私たちは、明示的に名前付きパラメータ(使用していることに注意してくださいnewUser)、クエリ、およびWithParamそれを供給するための方法を。これは、安全な私たちのエンコーディングを保持サイファー・インジェクション攻撃から保護し、クエリプランをキャッシュできるようにすることにより、パフォーマンスを向上させます。

彼らはまだ存在しない場合にのみ、ユーザーを作成します。

このサイファー:

MERGE (user:User { Id: 456 })
ON CREATE user
SET user.Name = 'Jim'

パラメータを使用する必要があります。

CREATE (user:User { Id: {id} })
ON CREATE user
SET user = {newUser}

そして、このC#のです:

var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
    .Merge("(user:User { Id: {id} })")
    .OnCreate()
    .Set("user = {newUser}")
    .WithParams(new {
        id = newUser.Id,
        newUser
    })
    .ExecuteWithoutResults();

ユーザーを作成し、既存のものにそれらを関連付けます

このサイファー:

MATCH (invitee:User)
WHERE invitee.Id = 123
CREATE invitee-[:INVITED]->(invited:User {newUser})

このC#があります:

var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
    .Match("(invitee:User)")
    .Where((User invitee) => invitee.Id == 123)
    .Create("invitee-[:INVITED]->(invited:User {newUser})")
    .WithParam("newUser", newUser)
    .ExecuteWithoutResults();

2人の既存のユーザーを関連付けます

このサイファー:

MATCH (user1:User), (user2:User)
WHERE user1.Id = 123, user2.Id = 456
CREATE user1-[:FRIENDS_WITH]->user2

このC#があります:

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

彼らはすでに関連していない場合にのみ、2人の既存のユーザーを関連付けます

このサイファー:

MATCH (user1:User), (user2:User)
WHERE user1.Id = 123, user2.Id = 456
CREATE UNIQUE user1-[:FRIENDS_WITH]->user2

このC#があります:

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();

ユーザーに単一のプロパティを更新します。

このサイファー:

MATCH (user:User)
WHERE user.Id = 123
SET user.Age = 25

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 123)
    .Set("user.Age = {age}")
    .WithParam("age", 25)
    .ExecuteWithoutResults();

注意:我々は、データを渡すために、再度パラメータを使用しています。決してのような文字列の連結を経由してこれを実行しないSet("user.Age = " + age.ToString())そうでなければ、エンコードのバグ、セキュリティリスクを導入し、大幅のNeo4j自体にクエリプランのキャッシュをバイパスすることによって、クエリのパフォーマンスに影響を与えます。

ユーザーのすべてのプロパティを置き換え

このサイファー:

MATCH (user:User)
WHERE user.Id = 123
SET user = { Id: 123, Age: 25, Email: '[email protected]' }

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 123)
    .Set("user = {tatham}")
    .WithParam("tatham", new User { Id = 123, Age = 25, Email = "[email protected]" })
    .ExecuteWithoutResults();

ユーザーを削除します。

このサイファー:

MATCH (user:User)
WHERE user.Id = 123
DELETE user

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 123)
    .Delete("user")
    .ExecuteWithoutResults();

ユーザーとすべてのインバウンド関係を削除します。

このサイファー:

OPTIONAL MATCH (user:User)<-[r]-()
WHERE user.Id = 123
DELETE r, user

このC#があります:

graphClient.Cypher
    .OptionalMatch("(user:User)<-[r]-()")
    .Where((User user) => user.Id == 123)
    .Delete("r, user")
    .ExecuteWithoutResults();

特定のユーザーのすべてのラベルを取得します。

このサイファー:

MATCH (user:User)
WHERE user.Id = 1234
RETURN labels(user)

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 1234)
    .Return(user => user.Labels())
    .Results

特定のユーザーのすべてのラベルを取得し、まだユーザーあまりにも

このサイファー:

MATCH (user:User)
WHERE user.Id = 1234
RETURN user, labels(user)

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 1234)
    .Return(user => new {
        User = user.As<User>(),
        Labels = user.Labels()
    })
    .Results

ユーザーを取得し、その後、ユーザーとリターンにこの番号を追加する彼らの友人を数えます。

注:これはのNeo4j 3.0ストアドプロシージャを使用した例です。オブジェクトにプロパティを追加する他の方法があり、これは使用し、CALL、歩留まりの一例でAPOCのNeo4jストアドプロシージャ

このサイファー:

MATCH (user:User)
WHERE user.Id = 1234
WITH user, size((user)-[:IS_FRIENDS_WITH]->(:Friend)) as numberOfFriends
CALL apoc.map.setKey(user, 'numberOfFriends', numberOfFriends) YIELD value AS userWithFriends
RETURN userWithFriends

このC#があります:

graphClient.Cypher
    .Match("(user:User)")
    .Where((User user) => user.Id == 1234)
    .With("user, size((user)-[:IS_FRIENDS_WITH]->(:Friend)) as numberOfFriends")
    .Call("apoc.map.setKey(user, 'numberOfFriends', numberOfFriends)").Yield("value AS userWithFriends")
    .Return(userWithFriends => new {
        User = userWithFriends.As<User>()
    })
    .Results
オリジナル住所ます。https://www.cnblogs.com/ulex/p/6066083.html

おすすめ

転載: www.cnblogs.com/jpfss/p/11411417.html