0

我正在尝试获取将请求顶点连接到每个卡片顶点的顶点。卡到请求的关系是一对多的(每张卡有很多请求)。

一张卡可以与物业的请求相关联"Status""In Use"如果该卡正在使用中。每张卡也将连接到具有属性的许多请求"Status""Future Use""Past Use"

我正在尝试创建一个显示每张卡最近使用的表格。

因此,如果将它连接到卡的边缘具有属性,我想返回一个请求"Status": "In Use"

如果该卡当前未使用,我会查找最近使用该卡的请求 ( "Status": "Past Use")。

如果该卡从未被使用过,我会寻找将使用该卡的最快即将到来的请求 ( "Status": "Future Use")。

我试图使用coalesce

.coalesce(
 select('request')
  .outE().hasLabel('AssignedTo}').has('Status', 'In Use'),
 select('request')
  .outE().hasLabel('AssignedTo').has('Status', 'Past Use').order().by('Timestamp', decr).limit(1),
 select('request')
  .outE().hasLabel('AssignedTo').has('Status', 'Future Use').order().by('Timestamp', incr).limit(1)
).as('status')

但这只会返回一条记录(In Use)。另一个版本:

.coalesce(
 select('card')
  .inE().hasLabel('AssignedTo}').has('Status', 'In Use'),
 select('card')
  .inE().hasLabel('AssignedTo').has('Status', 'Past Use').order().by('Timestamp', decr).limit(1),
 select('card')
  .inE().hasLabel('AssignedTo').has('Status', 'Future Use').order().by('Timestamp', incr).limit(1)
).as('status')

这仅返回了两条记录(均在使用中)。

我不久前尝试过choose,但也无法让它工作(不记得到底发生了什么)。

预期的:

取回具有属性"Status":的边的单个顶点"In Use"

如果此边不存在,则获取具有属性的边的最新顶点"Status": "Past Use"

如果没有符合条件的边,则获取具有属性"Status":的边的最快即将到来的顶点"Future Use"

4

1 回答 1

1

我不确定您的查询出了什么问题,因为您没有完全发布它,但这应该可以:

g.V().hasLabel("Card").as("c").coalesce(
    outE("assigned").has("status", "In Use"),
    outE("assigned").has("status", "Past Use").order().by("Timestamp", desc).limit(1),
    outE("assigned").has("status", "Future Use").order().by("Timestamp", asc).limit(1),
).as("s").inV().as("r")
.select("c","s","r").by("name").by("status").by("name")
于 2019-11-07T20:13:15.430 回答