【问题标题】:Traversing nodes but including the starting node in the result in Neo4J with Gremlin使用 Gremlin 在 Neo4J 中遍历节点但在结果中包含起始节点
【发布时间】:2012-07-02 16:05:16
【问题描述】:

我有一个代表用户和他们撰写的一些文章的图表。我需要创建类似活动流的东西,包括用户及其朋友撰写的文章。

http://twitpic.com/a342f4

我可以像这样拥有所有用户朋友的帖子:

g.v(4).out("KNOWS").out("POSTED")

然后返回

v[9]
v[11]

但我还需要包含使用查询检索到的原始用户的帖子:

g.v(4).out("POSTED")

返回

v[10]

我怎样才能拥有所有帖子而不必进行 2 次查询然后稍后合并它们? 我需要得到这样的回报:

v[9]
v[10]
v[11]   

谢谢

PD:我正在使用 Gremlin 和 Neo4jClient,但如果有人有其他更好的解决方案,那也很好,此时我仍然可以更改我正在使用的一些工具

【问题讨论】:

  • 您是否仅限于使用 gremlin?是否可以选择 Cypher,如果可以,可以通过 Cypher 查询来完成。
  • 一点也不,我正在为一个 C# 项目研究 Neo4j,所以基本上我可以改变任何东西,只要我能在 C# 上实现它。

标签: c# neo4j gremlin neo4jclient


【解决方案1】:

使用 Gremlin 的聚合步骤和 Groovy 的独特方法:

posts = []
g.v(4).out('POSTED').aggregate(posts).iterate()
g.v(4).out('KNOWS').out('POSTED').aggregate(posts).iterate()
return posts.unique()

看...

【讨论】:

  • 正是我的想法,这应该完全符合他的需求。
  • 感谢您的快速回复,我将尝试使用 C# 库来完成,并让您知道何时完成。
  • @espeed 这正是我所需要的,我只需要弄清楚如何在 .Net 客户端上做到这一点。
  • 嗨马拉维。我可以向您展示如何在 Bulbs 中执行此操作,但我对 C# 库不太熟悉。这将是在 Neo4j 邮件列表上提出的一个好问题。我知道 C# 作者经常在那里闲逛。
【解决方案2】:

我知道你要了一个 gremlin,但你说你也对 cypher 持开放态度,这可能代表不同格式的查询

START
    user=node(4)
MATCH
    user-[:POSTED]->posts,
    user-[:KNOWS]->()-[:POSTED]->friendPosts
RETURN
    posts, friendPosts

这将返回您使用 Cypher 寻找的结果。

//编辑说明:这将首先遍历并抓取用户的所有帖子,然后将遍历到朋友,因为我们实际上不需要朋友信息,所以现在是匿名的,然后遍历朋友的帖子.

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多