Javascript 小精灵(海王星)有些复杂的查询不';不显示边属性

Javascript 小精灵(海王星)有些复杂的查询不';不显示边属性,javascript,gremlin,amazon-neptune,Javascript,Gremlin,Amazon Neptune,我的数据库(AWS Neptune)中有一组数据,我使用Gremlin(NodeJS)进行查询 数据如下所示,我有一个如下查询: g.V() .outV().has('user\u id',user\u id).outE() .otherV().inE().hasLabel('shared_with') .outV().has('type',type).aggregate('object_id').fold() .V().hasLabel('user').has('user_id',user

我的数据库(AWS Neptune)中有一组数据,我使用Gremlin(NodeJS)进行查询

数据如下所示,我有一个如下查询:

g.V()
.outV().has('user\u id',user\u id).outE()
.otherV().inE().hasLabel('shared_with')
.outV().has('type',type).aggregate('object_id').fold()
.V().hasLabel('user').has('user_id',user_id).inE().hasLabel('shared_with'))
.outV().has('type',type).aggregate('object\u id').cap('object\u id'))

.unfold().dedup().valueMap().toList()我不确定您试图返回的数据是什么,但我收集到您希望回答的问题是“此用户有权访问哪些对象以及权限是什么?”

如果是这种情况,那么从用户顶点开始遍历的最佳位置是,从该顶点可以
union()
与组共享的对象到直接与用户共享的对象。最后,您可以从带有边的共享_中
project()
,获取对象的值以及权限的边属性

g.V().has('User', 'user_id', 'A').
union(
    out('belongs_to').inE('shared_with'),
    inE('shared_with')
).project('object', 'permission').
by(outV().valueMap().with(WithOptions.tokens)).
by(valueMap().with(WithOptions.tokens))

with(WithOptions.tokens)
将包含元数据,如
id
标签
,因此如果不需要,您可以将其从遍历中删除。

谢谢,我会尝试。我对所有不同的查询方式都感到困惑:)我尝试过,当一个对象与用户共享时效果很好,但一旦一个对象与一个组(用户所属)共享,Neptune就会抛出:{“requestId”:“c1de62bb-5542-46e1-9415-8bf3024f25d6”,“代码”:“InternalFailureException”,“detailedMessage”:“Neptune中发生了意外错误。”}似乎Neptune不太喜欢with(WithOptions.tokens)…因此,Neptune在with(WithOptions.tokens)中遇到了一些问题。我进行了一些挖掘,WithOptions.tokens解析为“~tinkerpop.valueMap.tokens”。~表示它是隐藏的。如果我使用with(“”),它可以工作,但我会得到我不想要的额外东西,只要我通过“~tinkerpop.valueMap.tokens”“海王星出了问题……我用你在上面创建的图表在海王星上进行了测试,返回与组或用户关联的对象时没有问题。如果您可以添加您正在使用的创建脚本,它将有助于调试此问题