【问题标题】:Py2neo: Find relations and return nodesPy2neo:查找关系并返回节点
【发布时间】:2015-01-12 14:00:32
【问题描述】:

您将如何在 neo4j Web 模块中的电影图示例中执行此 Cypher 查询,而不使用 graph.cypher.execute(或获取 graph.cypher.execute 以返回一组节点而不是丑陋的返回 -字符串)

MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies

我想要的是这样的:

(n4358:Person {born:1956,name:"Tom Hanks"}, {'PLAYED_IN', 'year': 1990}, n4354:Movie {released:1998,tagline:"At odds in life... in love on-line.",title:"You've Got Mail"})

其中 a[0] 给出了 tom hanks 节点,a[1] 给出了关系,a[2] 给出了电影。


编辑:添加“错误”示例输出

>>> print('List all Tom Hanks movies...')
>>> a = graph.cypher.execute('MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tomHanksMovies')
>>> print(a)

List all Tom Hanks movies...
    | tomHanksMovies                                                                                                                                                                 
----+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  1 | (n4354:Movie {released:1998,tagline:"At odds in life... in love on-line.",title:"You've Got Mail"})                                                                            
  2 | (n4360:Movie {released:1993,tagline:"What if someone you never met, someone you never saw, someone you never knew was the only someone for you?",title:"Sleepless in Seattle"})
  3 | (n4365:Movie {released:1990,tagline:"A story of love, lava and burning desire.",title:"Joe Versus the Volcano"})                                                               
  4 | (n4372:Movie {released:1996,tagline:"In every life there comes a time when that thing you dream becomes that thing you do",title:"That Thing You Do"})                         
  5 | (n4392:Movie {released:2012,tagline:"Everything is connected",title:"Cloud Atlas"})                                                                                            
  6 | (n4398:Movie {released:2006,tagline:"Break The Codes",title:"The Da Vinci Code"})                                                                                              
  7 | (n4417:Movie {released:1999,tagline:"Walk a mile you'll never forget.",title:"The Green Mile"})                                                                                
  8 | (n4431:Movie {released:1995,tagline:"Houston, we have a problem.",title:"Apollo 13"})                                                                                          
  9 | (n4437:Movie {released:2000,tagline:"At the edge of the world, his journey begins.",title:"Cast Away"})                                                                        
 10 | (n4446:Movie {released:2007,tagline:"A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire.",title:"Charlie Wilson's War"})     
 11 | (n4448:Movie {released:2004,tagline:"This Holiday Season… Believe",title:"The Polar Express"})                                                                                 
 12 | (n4449:Movie {released:1992,tagline:"Once in a lifetime you get a chance to do something different.",title:"A League of Their Own"})   


>>> print(a[0])

 tomHanksMovies                                                                                     
-----------------------------------------------------------------------------------------------------
 (n4354:Movie {released:1998,tagline:"At odds in life... in love on-line.",title:"You've Got Mail"})

>>> print(type(a[0]))

<class 'py2neo.cypher.core.Record'>

【问题讨论】:

  • 那么它返回了什么?
  • 查看编辑。这就是你要求的?
  • 哦,天哪。输出太坑爹了感谢上帝,我使用neo4j api 而不是py2neo。即使我现在也在等待答案。:(
  • @BhargavRao 是的..我更喜欢一直使用 Cypher,但还没有找到如何获得一个不错且可行的对象.. :-( 但是你使用 Neo4j 吗?蟒蛇到?
  • 我写了一篇论文,所有背景工作都使用 py 使用 neo4j。我使用的api是neo4j

标签: python neo4j py2neo


【解决方案1】:

我想你知道execute 实际上并没有返回一个字符串?您在a 中看到的是文档中指定的RecordList 的表示:

http://py2neo.org/2.0/cypher.html#py2neo.cypher.CypherResource.execute

a[0] 然后为您提供RecordList 中的第一个Record。然后可以按名称访问 Record 中的值,例如a[0]['tomHanksMovies'].

Record 对象的详细信息在这里:

http://py2neo.org/2.0/cypher.html#records

【讨论】:

  • 谢谢!我不知道为什么我错过了你能够做 a[0]['tomHanksMovies'] 并获得一个节点..
【解决方案2】:

如果您已经习惯使用 py2neo,您可以做的就是稍微修改您的查询以返回您想要的所有信息。例如,

a = graph.cypher.execute("MATCH (a:Person {name:"Tom Hanks"})-[acted:ACTED_IN]->(movies:Movie) RETURN a, acted, movies")

这应该做的是在列表中为您提供结果,就像您说您不想要的结果一样。但是,您可以从这里索引结果以获得您想要的每个部分。例如,a[0] 会给你第一行结果,a[0][0] 会给你第一行结果中的人节点,a[0][0][0] 会给你第一行中第一个节点的第一个属性等。从这里你可以运行一个 for 循环来将结果组织成你更感兴趣的形式。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多