4

ノードに接続されているすべてのノードと関係を取得したい。

私はこれを2つの方法でやろうとしました:

最初にNeo4j REST APIを介して私はこれを試しました

URI traverserUri = new URI( startNode.toString() + "/traverse/node" );
WebResource resource = Client.create()
        .resource( traverserUri );
String jsonTraverserPayload = t.toJson();
ClientResponse response = resource.accept( MediaType.APPLICATION_JSON )
        .type( MediaType.APPLICATION_JSON )
        .entity( jsonTraverserPayload )
        .post( ClientResponse.class );

System.out.println( String.format(
        "POST [%s] to [%s], status code [%d], returned data: "
                + System.getProperty( "line.separator" ) + "%s",
        jsonTraverserPayload, traverserUri, response.getStatus(),
        response.getEntity( String.class ) ) );
response.close();

そして、次の応答を取得します:

[ {
  "outgoing_relationships" : "http://localhost:7474/db/data/node/82/relationships/out",
  "data" : {
    "band" : "The Clash",
    "name" : "Joe Strummer"
  },
  "traverse" : "http://localhost:7474/db/data/node/82/traverse/{returnType}",
  "all_typed_relationships" : "http://localhost:7474/db/data/node/82/relationships/all/{-list|&|types}",
  "property" : "http://localhost:7474/db/data/node/82/properties/{key}",
  "all_relationships" : "http://localhost:7474/db/data/node/82/relationships/all",
  "self" : "http://localhost:7474/db/data/node/82",
  "properties" : "http://localhost:7474/db/data/node/82/properties",
  "outgoing_typed_relationships" : "http://localhost:7474/db/data/node/82/relationships/out/{-list|&|types}",
  "incoming_relationships" : "http://localhost:7474/db/data/node/82/relationships/in",
  "incoming_typed_relationships" : "http://localhost:7474/db/data/node/82/relationships/in/{-list|&|types}",
  "create_relationship" : "http://localhost:7474/db/data/node/82/relationships"
}, {
  "outgoing_relationships" : "http://localhost:7474/db/data/node/83/relationships/out",
  "data" : {
  }]

しかし、問題は、このノードの関係をもう一度見たい場合は、リンクをクリックする必要があることです"http://localhost:7474/db/data/node/82/relationships/all"

リンクを再度クリックせずにリレーションシップへのリンクではなく、ノードとそのリレーションシップが直接示されているデータを取得できませんか????

私がやろうとした2番目のことは、暗号クエリからこれを取得することです:

START a=node(3)
MATCH (a)-[:KNOWS]->(b)-[:KNOWS]->(c)-[:KNOWS]->(d)
RETURN a,b,c,d

しかし、これも機能しませんでした。これは、結果として複数の値が存在するため、反復して別のクエリを作成する必要があるためです(b)(c)

接続された関係が非常に多く、何度も繰り返すのが難しくなっているため、単一のクエリでこれを行うことはできません。どんな助けでも感謝されます。

4

3 に答える 3

5

Cypher を使用して、すべてのノードを特定のノードに接続するのは簡単です

START a=node(3)
MATCH (a)-[:KNOWS*]->(d)
RETURN distinct d

ただし、多数の接続ノードと深い接続がある場合、良好なパフォーマンスが得られない可能性があります。

接続の境界がわかっている場合は、クエリで明示的に指定するとパフォーマンスが向上します。

START a=node(3)
MATCH (a)-[:KNOWS*1..3]->(d)
RETURN Distinct d
于 2013-09-11T14:13:57.717 に答える
0

複数のノード、または重複ノードに関する質問について。何が言いたいのか理解した。これは、重複を取り除くためにそのようなクエリで行ったことです。a が c を知っている b を知っているが、c が本当に a であるかどうかについての詳細。みたいな。WHERE NOT のようなものを使用できます

start player=node({0})
          match player-[:player.active*2..2]-friendsOfFriends,
          where not(player-[:player.active]-friendsOfFriends) and player <>     friendsOfFriends
          return distinct friendsOfFriends
          order by friendsOfFriends.username asc
于 2014-02-04T21:57:46.327 に答える
-1

クエリを作成する場合

MATCH (a)-[r1:KNOWS]->(b)-[r2:KNOWS]->(c)-[r3:KNOWS]->(d) RETURN a,r1,b,r2,c,r3,d;

r(x)は、関係に関するそれぞれの詳細を返します。クエリに一致するパスごとに「行」があります。

デシリアライザーを定義して、エンティティではなく関係を認識しr(x)て構築する場合は、1 つのクエリですべてを実行できるはずです。

于 2014-03-12T02:59:45.360 に答える