C# Gremlin,如何获得帖子和所有评论以及评论上的嵌套评论,有点像reddit。在c中#

C# Gremlin,如何获得帖子和所有评论以及评论上的嵌套评论,有点像reddit。在c中#,c#,azure,azure-cosmosdb,graph-databases,gremlin,C#,Azure,Azure Cosmosdb,Graph Databases,Gremlin,我想标题说明了一切。我正在建立一个社交网络平台,允许发布内容,并能够创建无限的子帖子(评论和评论评论)。目前我可以创建帖子,但我认为对于GET,我需要某种内置的.重复或递归循环,以便不断查找子帖子,然后最终将它们映射到c#类(带有子帖子的嵌套列表) 这将包含您需要的所有数据 这将包含您需要的所有数据。图片很好,但最好通过提供一个生成一些示例数据的小Gremlin脚本来询问有关Gremlin的问题。脚本确实可以帮助构建问题的上下文,并在答案()中获得一段经过测试和工作的代码 如果没有这一点,我不得

我想标题说明了一切。我正在建立一个社交网络平台,允许发布内容,并能够创建无限的子帖子(评论和评论评论)。目前我可以创建帖子,但我认为对于GET,我需要某种内置的.重复或递归循环,以便不断查找子帖子,然后最终将它们映射到c#类(带有子帖子的嵌套列表)

这将包含您需要的所有数据


这将包含您需要的所有数据。

图片很好,但最好通过提供一个生成一些示例数据的小Gremlin脚本来询问有关Gremlin的问题。脚本确实可以帮助构建问题的上下文,并在答案()中获得一段经过测试和工作的代码

如果没有这一点,我不得不猜测一下,因为您的图表没有边缘标签或属性名称,但要获得所需的结构,可能需要使用
project()


因此,使用
project()
可以定义
Map
的关键点,将由“posted”标识的
顶点转换为。进入这些键的值由跟随并按键顺序映射的
by()
调制器指定。所以为了得到“post”,我们得到了顶点的“content”属性。要获得“author”,我们将“author”边遍历到“person”顶点并提取名称。为了获得“评论”,我假设您需要每个评论的内容,并将其全部提取出来。您可能希望使用
order()
对这些内容进行更好的排序,或者您可能希望
project()
将这些内容各自放入自己的映射中,该映射包含与原始帖子相似的数据。无论您做什么,您现在都有了实现这种转换的模式。

图片很好,但最好通过提供一个生成一些示例数据的小Gremlin脚本来询问有关Gremlin的问题。脚本确实可以帮助构建问题的上下文,并在答案()中获得一段经过测试和工作的代码

如果没有这一点,我不得不猜测一下,因为您的图表没有边缘标签或属性名称,但要获得所需的结构,可能需要使用
project()


因此,使用
project()
可以定义
Map
的关键点,将由“posted”标识的
顶点转换为。进入这些键的值由跟随并按键顺序映射的
by()
调制器指定。所以为了得到“post”,我们得到了顶点的“content”属性。要获得“author”,我们将“author”边遍历到“person”顶点并提取名称。为了获得“评论”,我假设您需要每个评论的内容,并将其全部提取出来。您可能希望使用
order()
对这些内容进行更好的排序,或者您可能希望
project()
将这些内容各自放入自己的映射中,该映射包含与原始帖子相似的数据。无论您做什么,您现在都有了实现这种转换的模式。

我知道.as()在该代码段中没有做任何事情,但似乎我需要使用它,不确定。
as()
在原始查询中确实没有做任何事情,应该删除。事实上,它可能已经被Gremlin查询优化器删除了(请参阅在任何查询结束时链接
.explain()
的输出)。@jbmuso谢谢你,这个.explain()方法看起来真的很有用。我知道.as()在片段中没有做任何事情,但似乎我需要使用它,不确定。
as()
确实没有在原始查询中执行任何操作,应该删除。事实上,它可能是由Gremlin查询优化器删除的(请参阅在任何查询结束时链接
.explain()
的输出)。@jbmuso感谢这一点,该.explain()方法看起来非常有用。
Dictionary<string, string> communityQueries = new Dictionary<string, string>
{
    {
        "GetPost",    "g.V('" + postId + "').as('mainpost')" +
                           ".repeat(outE().inV().hasLabel('post'))"
    }
};
{
     "Post (content)"
     "AuthorId"
     "Comments" : [
          {
              "Post":
              "AuthorId"
              "Comments"...
           }...
      ]
}
g.V('p1').as('a').union(select('a'), out('author'), out('comments'))
g.V(postId).
  project('post','author','comments').
    by('content').
    by(out('author').values('name'))
    by(repeat(out('post')).emit().values('content').fold())