azure - 使用tinkerpop3在同一查询中输出顶点和相邻顶点

标签 azure gremlin tinkerpop3 azure-cosmosdb

我是 gremlin 新手,正在尝试了解如何使用 Azure Cosmos DB 和 GraphSON 在同一结果中获取文章、作者和附件。

我的图表如下所示:

[User] <- (edge: author) - [Article] - (edge: attachments) -> [File1, File2]

我想获取用户界面中所需的所有内容,以根据请求显示文章以及作者和有关附件的信息。

我试图获取类似于此伪代码的内容:

{
article: {...},
author: [{author1}],
attachment: [{file1}, {file2}]
}

到目前为止我的尝试:

g.V().hasLabel('article').as('article').out('author', 'attachments').as('author','attachments').select('article', 'author', 'attachments')

如何编写查询来获取不同的值?

最佳答案

当询问有关 Gremlin 的问题时,以如下形式提供一些示例数据总是有帮助的:

g.addV('user').property('name','jim').as('jim').
  addV('user').property('name','alice').as('alice').
  addV('user').property('name','bill').as('bill').
  addV('article').property('title','Gremlin for Beginners').as('article').
  addV('file').property('file','/files/a.png').as('a').
  addV('file').property('file','/files/b.png').as('b').
  addE('authoredBy').from('article').to('jim').
  addE('authoredBy').from('article').to('alice').
  addE('authoredBy').from('article').to('bill').
  addE('attaches').from('article').to('a').
  addE('attaches').from('article').to('b').iterate()

请注意,我将您的边标签名称修改为更像动词,以便它们更好地将自己与类似名词的顶点标签区分开来。它往往与边缘的方向一起阅读,如:article --authoredBy-> user

无论如何,您的问题最容易通过 project() step 解决。 :

gremlin> g.V().has('article','title','Gremlin for Beginners').
......1>   project('article','authors','attachments').
......2>     by().
......3>     by(out('authoredBy').fold()).
......4>     by(out('attaches').fold())
==>[article:v[6],authors:[v[0],v[2],v[4]],attachments:[v[10],v[8]]]

在上面的代码中,请注意在 by() 步骤中使用 fold() - 这将强制内部遍历的完整迭代并将其放入一个列表。如果您错过了该步骤,您将仅得到一个结果(即第一个结果)。

更进一步,我添加了 valueMap() 并添加了结果,以便您可以更好地查看上面顶点中包含的属性。

gremlin> g.V().has('article','title','Gremlin for Beginners').
......1>   project('article','authors','attachments').
......2>     by(valueMap()).
......3>     by(out('authoredBy').valueMap().fold()).
......4>     by(out('attaches').valueMap().fold()).next()
==>article={title=[Gremlin for Beginners]}
==>authors=[{name=[jim]}, {name=[alice]}, {name=[bill]}]
==>attachments=[{file=[/files/b.png]}, {file=[/files/a.png]}]

关于azure - 使用tinkerpop3在同一查询中输出顶点和相邻顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45609831/

相关文章:

azure - 在Azure自托管中插入PAT后找不到可用的libssl版本

C# Azure 服务总线队列 OnMessage 回调

gremlin - 通过 Gremlin 查询从节点返回属性子集

graph - Gremlin 按顶点属性分组并获取同一顶点中的其他属性的总和

shortest-path - 在 Tinkerpop 3.1 中找到两个节点之间最短路径的最佳方法

c# - 由于对象的当前状态,操作无效。使用 dotnet core 5 在 eventhub 中获取 microsoft.azure.amqp

Azure Webjob 函数没有输入参数?

java - Neo4J 中的 Gremlin 遍历

gremlin - 如何删除gremlin查询中的多条边

java - java spring项目中gremlin客户端集群的最佳实践是什么