Graph 用于计算没有特定边的顶点的Gremlin查询

Graph 用于计算没有特定边的顶点的Gremlin查询,graph,gremlin,amazon-neptune,Graph,Gremlin,Amazon Neptune,我在AWS中有一个Neptune数据库,其图表如下: 因此,有一个用户组织了一个聚会,并创建了两个邀请。但用户已撤回其中一个邀请 我正在寻找一个查询,以计算尚未撤回的邀请数量,在上述情况下为1 我找到了一种获取邀请的方法,我正在使用: 但我似乎找不到任何东西来过滤那些已经撤回的邀请。我不认为我可以遍历到不是drawnby的边,因为它仍然返回2,因为我们有一个createdBy和一个drawnby边 有人有什么建议吗?我发现,这建议: gremlin> g.V.filter{!it.both

我在AWS中有一个Neptune数据库,其图表如下:

因此,有一个用户组织了一个聚会,并创建了两个邀请。但用户已撤回其中一个邀请

我正在寻找一个查询,以计算尚未撤回的邀请数量,在上述情况下为1

我找到了一种获取邀请的方法,我正在使用:

但我似乎找不到任何东西来过滤那些已经撤回的邀请。我不认为我可以遍历到不是drawnby的边,因为它仍然返回2,因为我们有一个createdBy和一个drawnby边

有人有什么建议吗?我发现,这建议:

gremlin> g.V.filter{!it.bothE('knows').hasNext()}
我想这是Groovy,但实际上我使用的是Javascript类型脚本。我尝试了.filter函数,但这似乎抛出了一个错误:

.filter(function(this: any) {
    return !this.bothE("isRevokedBy");
})

您可以这样做:

g.V("user#123").as('u').
  in('createdBy').
  not(where(out('withdrawnBy').as('u')))
例如:

但我认为最好在createdBy边缘上添加一个属性,指示已被撤销,而不是在它们之间添加另一个边缘

像这样:

g.V("user#123").
  inE('createdBy').not(has('withdrawn', true)).outV()
例如:

当您使用JavaScript包时,以下代码将起作用:

const gremlin = require("gremlin");
const __ = gremlin.process.statics;
const traversal = gremlin.process.AnonymousTraversalSource.traversal;
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const dc = new DriverRemoteConnection("ws://localhost:8182/gremlin");
const g = traversal().withRemote(dc);

const result = await g
    .V("user#123")
    .in_("createdBy")
    .where(__.not(__.out("withdrawnBy")))
    .toList()

您可以这样做:

g.V("user#123").as('u').
  in('createdBy').
  not(where(out('withdrawnBy').as('u')))
例如:

但我认为最好在createdBy边缘上添加一个属性,指示已被撤销,而不是在它们之间添加另一个边缘

像这样:

g.V("user#123").
  inE('createdBy').not(has('withdrawn', true)).outV()
例如:

当您使用JavaScript包时,以下代码将起作用:

const gremlin = require("gremlin");
const __ = gremlin.process.statics;
const traversal = gremlin.process.AnonymousTraversalSource.traversal;
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const dc = new DriverRemoteConnection("ws://localhost:8182/gremlin");
const g = traversal().withRemote(dc);

const result = await g
    .V("user#123")
    .in_("createdBy")
    .where(__.not(__.out("withdrawnBy")))
    .toList()