0

GraphDb側

頂点:ユーザー

エッジ:持っています

頂点:車

オブジェクト側

public class User {  
    public string Name { get; set; }

    [GraphEdge("HAS_CAR")]
    public ICollection<Car> Cars { get; set; }
}

問題

グレムリン経由でNeo4JからCarsプロパティを持つユーザーXを取得したいですか?(私はNeo4jClientを使用しています)

これは、LinqのIncludeメソッドをEntityに非常によく似ています。

よろしくお願いします

4

2 に答える 2

1

このようなグラフを想定すると:

サンプルグラフ

このようなGremlinクエリを使用して、すべてのユーザーのすべての車を取得します。

g.v(0).out('HAS_USER').out('HAS_CAR')

それでは、赤い車だけに絞り込みましょう。

g.v(0).out('HAS_USER').out('HAS_CAR').filter { it.Color == "Red" }

最後に、車ではなくユーザーが必要です。グレムリンが実際のグレムリン(小さな生き物)のように機能していると考えるのが最も簡単です。あなたは彼に、ユーザーに向かって走り、次に各車に向かって走り、次に各車の色をチェックするように指示しました。ここで、彼が元のユーザーに戻る必要があります。これを行うには、次のようにクエリにマークを付けます。

g.v(0).out('HAS_USER').as('user').out('HAS_CAR').filter { it.Color == "Red" }.back('user')

Neo4jClientを使用してC#でこれを作成する方法は、次のようになります。

graphClient
    .RootNode
    .Out<User>(HasUser.TypeKey)
    .As("user")
    .Out<Car>(HasCar.TypeKey, c => c.Color == "Red")
    .BackV<User>("user")

ここでの唯一の違いは、エッジと頂点にそれぞれBackEまたはを使用する必要があることです。これは、静的に型指定されたC#の世界では、さまざまな列挙型を返すことができるように、さまざまなメソッド名を使用する必要があるためです。BackVBack

お役に立てば幸いです。:)

-タサム

于 2012-04-29T23:07:55.123 に答える
0

オグズ、

質問を更新したので、理解が深まりました。

GraphEdgeAttributeはNeo4jClientの一部ではないため、どこから来たのかわかりません。

Neo4jClientでは、ディープオブジェクトをロードしません。つまり、プロパティを追跡したり、それ以上のコレクションをロードしたりすることはありません。これを行うのは、a)サーバーへのラウンドトリップを大量に行う必要があり、b)実際にロードするデータを明示する必要があると考えているためです。私はそれが良いアプローチであるとは思わないので、Neo4jプロジェクトのSpringDataと同等になることを望んでいません。

グレムリンの代わりにサイファーを見たいと思うかもしれません。これにより、複数のノードからのプロジェクションを含むデータをテーブルとしてロードできます。

-タサム

于 2012-04-30T02:31:56.423 に答える