首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnormCypher:如何获得给定节点的完整路径?

AnormCypher:如何获得给定节点的完整路径?
EN

Stack Overflow用户
提问于 2014-05-21 09:54:33
回答 1查看 268关注 0票数 0

对于由两组节点组成的图:

n1 -> n2 -> n3 -> n4

n5 -> n6 -> n7

用命令创建:

创建(n1 { id:'n1‘})-:rel->(n2 {id:'n2’})-:rel->(n3 { id:'n3‘})-:rel->(n4 {id:'n4'})

创建(n5 { id:'n5‘})-:rel->(n6 {id:'n6’})-:rel->(n7 { id:'n7‘})

对于这两项请求:

匹配p= (n {id:'n1'})-*-(m)返回节点(P)作为节点;

匹配p= (n {id:'n1'})-*-(m)返回关系(P);

AnormCypher (http://anormcypher.org/)只返回与节点n1和n2相关的信息,而Neo4J Web控制台则返回完整的路径。

如何在AnormCypher中获取完整路径的所有节点和关系?

演示这一点的程序(在此消息的末尾)输出:

代码语言:javascript
复制
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()

代码:

代码语言:javascript
复制
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)
  })
}

 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-21 21:10:27

问题在于,您的map函数正在创建一个惰性流,并且您没有对该流的其余部分进行迭代。如果将.toList.last添加到.map的末尾,强制在完整流上进行迭代,则应该会得到更长的路径结果。

例如:

代码语言:javascript
复制
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,后者为您完成了这个任务。

更新:下面是一个没有返回类型的示例:

代码语言:javascript
复制
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)))
    })
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23779783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档