graph-databases - Apache Tinkerpop Gremlin 使用 Select Values As 返回查询结果

标签 graph-databases gremlin tinkerpop datastax-enterprise-graph

我有这个查询,它正在按我预期的方式工作。

g.V().or(hasLabel("poi"),hasLabel("business")).as("dest")
.outE().inV().hasLabel("region").as("reg")
.select("dest").values("name").as("dest_name")
.select("dest").values("budget").as("dest_budget")
.select("reg").values("name").as("reg_name")
.select("reg_name","dest_name","dest_budget")

这个查询产生这个结果。

enter image description here

如我所料。但是我需要从“目的地”检索更多属性我需要检索更多 10 个属性。这会让我陷入这样的境地

g.V().or(hasLabel("poi"),hasLabel("business")).as("dest")
.outE().inV().hasLabel("region").as("reg")
.select("dest").values("name").as("dest_name")
.select("dest").values("budget").as("dest_budget")
.select("dest").values("property3").as("property3")
.select("dest").values("property4").as("property4")
//insert more queries like from the above
.select("reg").values("name").as("reg_name")
.select("reg_name","dest_name","dest_budget","property3","property4")

查询最终会变长,我试图避免这种情况,因为我也需要从区域中选择值。所以我最初的想法是使用 select 来选择多个值并用这样的别名标记每个值

g.V().
or(hasLabel("poi"),hasLabel("business"))
.as("destination")
.outE().inV().as("region")
.select("destination").values("name","budget").as("dest_name","dest_budget")
.select("region").values("name").as("reg_name")
.select("dest_name","reg_name","dest_budget")

然而,我对这个结果感到惊讶。这是我没想到的。

enter image description here

据我了解,values 中的名称将映射到 as 步骤中传递的每个值。我错了吗?

我是否可以在不编写长查询的情况下从第一个屏幕截图中检索结果?

最佳答案

as() 标记步骤,而不是该步骤中的值。所以通过这样做:

.select("destination").values("name","budget").as("dest_name","dest_budget")

您只是将 values() 步骤命名了两次。我认为您可以极大地简化这种遍历以获得您想要得到的结果,并且它不涉及将大量 select() 步骤串在一起:

g.V().or(hasLabel("poi"),hasLabel("business")).
  project('dest_name','dest_budget','reg_name').
    by('name').
    by('budget').
    by(out().hasLabel("region").values('name').fold())

您会得到一个略有不同的结构,因为“reg_name”将是所有区域名称的列表,而不是具有扁平结构,但如果需要,您可以展开我想象的结构。

关于graph-databases - Apache Tinkerpop Gremlin 使用 Select Values As 返回查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169845/

相关文章:

database - 图数据库模式设计 - 这适合 neo4j 吗?

java - Spring Data Neo4j - 关系实体的(所有)属性

cassandra - 带 Java 驱动程序的 DSE 图,如何添加边

gremlin - 使用 Gremlin 将属性和元属性提取为类似 JSON 的结构

amazon-web-services - 有没有办法在 Amazon Neptune Graph 的边缘存储更多信息?

graph - 在 gremlin 查询中显示子级别

http - TITAN 图数据库是否提供 HTTP API?

sql-server - SQL Server 图形数据库 - 使用多种边类型的最短路径

java - 如何将 Gremlin-Console-Code 转换为 Java-Code?