[英]TinkerPop multiple .by() only returning the last .by() value
我将 Java 与 TinkerPop v. 3.5.1 与 Neptune DB 一起使用
我正在尝试使用.path().by("fieldName").by("otherFieldName")
但我只从返回的最后一个.by("otherFieldName")
中获取值,当我想要两者的值时.by()
。
这是一个示例图(在 gremlify 中生成):
g.addV('Student').as('1').
property(single, 'name', 'Peter').
property(single, 'age', 22).addV('School').
as('2').
property(single, 'name', 'Jefferson').
property(single, 'address', '1234 Jefferson St.').
addV('Administration').as('3').
property(single, 'status', 'AFW').
property(single, 'level', '4.2A').
addV('Class').as('4').
property(single, 'name', 'Math').
property(single, 'level', 2).addV('ClassReq').
as('5').
property(single, 'name', 'Math').
property(single, 'level', 1).addV('Student').
as('6').
property(single, 'name', 'Sam').
property(single, 'age', 24).addV('Class').
as('7').
property(single, 'name', 'English').
property(single, 'level', 2).addE('attends').
from('1').to('2').addE('administers').
from('3').to('2').addE('isReqsFor').from('5').
to('4').addE('offers').from('2').to('4').
addE('attends').from('6').to('2').
addE('offers').from('2').to('7')
当我使用:
g.V().has("name", "Jefferson").out("offers").aggregate("x").by("level").by("name").cap("x")
我只得到返回的“名称”字段:
[
[
"English",
1,
"Math",
1
]
]
另外,返回值中的1
字段是什么? 起始节点(学校)中没有“级别”字段。 如果来自Class
节点,则“级别”值都应为2
。
有没有办法返回顶点中多个字段的值?
我猜你是用 Gremlify 运行这些实验的(我认识 Gremlify 输出图表的方式),然后我看到了你关于使用它的评论。 该工具后处理来自 Gremlin 查询的 JSON 结果。 您所看到的是来自aggregate
创建的 BulkSet 的“批量”计数。 如果您要在 TinkerGraph 或 Neptune 上运行相同的查询,您将看不到这1
值。
无论如何,如果要聚合名称和级别,一种方法如下:
g.V().has("name", "Jefferson").
out("offers").
aggregate("x").by(values("level","name").fold()).
cap("x")
其中(在海王星上)返回:
[[2, 'Math'], [2, 'English']]
by
调制器以循环方式应用。 在aggregate
的情况下,每个“x”实例只需要一个值,因此使用最后一个by
调制器。
我假设这是您正在处理的更大查询的一部分,因为实际上aggregate
在给出的示例中没有增加任何values('name','level').fold()
,因为您可以在out()
步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.