0

ノードの 2 つのグループで構成されるグラフの場合:

n1 -> n2 -> n3 -> n4

n5 -> n6 -> n7

コマンドで作成:

CREATE (n1 { id:'n1' })-[:rel]->(n2 {id:'n2' })-[:rel]->(n3 { id:'n3' })-[:rel] ->(n4 {id:'n4'})

CREATE (n5 { id:'n5' })-[:rel]->(n6 {id:'n6' })-[:rel]->(n7 { id:'n7' })

両方のリクエストの場合:

MATCH p = (n {id: 'n1'})-[*]-(m) RETURN nodes(p) をノードとして;

MATCH p = (n {id: 'n1'})-[*]-(m) RETURN 関係 (p) を rels として返します。

AnormCypher ( http://anormcypher.org/ ) はノード n1 と n2 にのみ関連する情報を返しますが、Neo4J Web コンソールは完全なパスを返します。

AnormCypher で完全なパスのすべてのノードと関係を取得する方法は?

これを示すプログラム (このメッセージの最後) は次のように出力します。

ListBuffer(NeoNode(32,Map(id -> n1)), NeoNode(33,Map(id -> n2)))
Node: id=32 props=Map(id -> n1)
--Props keys:
----key: id val: n1
Node: id=33 props=Map(id -> n2)
--Props keys:
----key: id val: n2
ListBuffer(NeoRelationship(27,Map(),32,33))
Rel: id=27 start=32 end=33 props=Map()

コード:

object Simple {
   def main(args: Array[String]): Unit = {

Cypher("MATCH p = (n {id: 'n1'})-[*]-(m) RETURN nodes(p) as nodes;")().map { row =>

  println(row[Seq[org.anormcypher.NeoNode]]("nodes"))
  val nodes = row[Seq[org.anormcypher.NeoNode]]("nodes")

  nodes.map(n => {
    val props = n.props
    println("Node: id="+n.id+" props="+props)
    println("--Props keys: ")
    val x = props.keys
    props.keys.map( k=> println("----key: "+k+" val: "+props(k)))
    })
}

Cypher("MATCH p = (n {id: 'n1'})-[*]-(m) RETURN relationships(p) as rels ;")().map { row =>

  println(row[Seq[NeoRelationship]]("rels"))
  val rels = row[Seq[NeoRelationship]]("rels")
  rels.map(r => {
    val x = r.props
    println("Rel: id="+r.id+" start="+r.start+" end="+r.end+" props="+r.props)
  })
}

 }
}
4

1 に答える 1

0

問題は、map関数が遅延ストリームを作成していて、残りのストリームを反復処理していないことです。の末尾に.toListorを追加して、ストリーム全体にわたって反復を強制すると、より長いパスの結果が得られるはずです。.last.map

例えば:

Cypher("MATCH p = (n {id: 'n1'})-[*]-(m) RETURN nodes(p) as nodes;")().map { row =>
  println(row[Seq[org.anormcypher.NeoNode]]("nodes"))
  val nodes = row[Seq[org.anormcypher.NeoNode]]("nodes")

  nodes.map(n => {
    val props = n.props
    println("Node: id="+n.id+" props="+props)
    println("--Props keys: ")
    val x = props.keys
    props.keys.map( k=> println("----key: "+k+" val: "+props(k)))
    })
}.toList

.foreachまたは、代わりに を使用することもできます。これにより.map、これが行われます。

更新: 戻り値の型がない例を次に示します。

Cypher("MATCH p = (n {id: 'n1'})-[*]-(m) RETURN nodes(p) as nodes;")().foreach { row =>
  println(row[Seq[org.anormcypher.NeoNode]]("nodes"))
  val nodes = row[Seq[org.anormcypher.NeoNode]]("nodes")

  nodes.map(n => {
    val props = n.props
    println("Node: id="+n.id+" props="+props)
    println("--Props keys: ")
    val x = props.keys
    props.keys.map( k=> println("----key: "+k+" val: "+props(k)))
    })
}
于 2014-05-21T21:10:27.047 に答える