Gremlin Python:用字母数字顺序选择最早日期的顶点

2024-05-16 00:14:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我用海王星作为我的图形数据库。在

我有一个ID(UUID)、标签和日期的顶点。在

我可以像这样拖动多个顶点的所有属性:

g.V('633378c3-b016-433a-a3ca-c1662982f970').valueMap(True).as_('test1').V('6e5db9a0-2946-4d98-9657-07a3fe825598').valueMap(True).as_('test2').select('test1', 'test2').toList()

[{'test11': {<T.id: 1>: '633378c3-b016-433a-a3ca-c1662982f970', 'Date': [datetime.datetime(2019, 7, 7, 20, 0)], <T.label: 3>: 'sample_id'}, 'test2': {<T.id: 1>: '6e5db9a0-2946-4d98-9657-07a3fe825598', 'Date': [datetime.datetime(2019, 7, 7, 20, 0)], <T.label: 3>: 'sample_id'}}]

但我只想拉最早日期的顶点,如果两个日期相同,我想按字母数字顺序拉较早的顶点。在

如果我尝试

^{pr2}$

我得到了一个错误:

gremlin_python.driver.protocol.GremlinServerError: 498: {"requestId":"101ab1d2-ced8-4a20-adc9-5deb97e1e801","code":"UnsupportedOperationException","detailedMessage":"java.util.LinkedHashMap cannot be cast to org.apache.tinkerpop.gremlin.structure.Element"}

Tags: sampleidtruedatetimedateaslabelgremlin
1条回答
网友
1楼 · 发布于 2024-05-16 00:14:57

您得到错误的原因是因为您试图将valueMap()的结果视为一个图Map,因为by('Date')语法只对Element有效。根据您想要做什么的描述,我认为您可以将遍历简化为:

g.V('633378c3-b016-433a-a3ca-c1662982f970','6e5db9a0-2946-4d98-9657-07a3fe825598'). 
  order().by('Date').by(T.id).
  limit(1).
  valueMap(True).toList()

我假设“前面一个字母数字顺序”是指UUID,这就是为什么我添加了第二个by()调制器和T.id。在

如果要保留这两个顶点以便以后在遍历中使用,则有许多选项。你可以:

^{pr2}$

分别用limit(local,1)和{}按位置访问它们。使用相同的方法,您还可以project()将它们转换为Map

g.V('633378c3-b016-433a-a3ca-c1662982f970','6e5db9a0-2946-4d98-9657-07a3fe825598'). 
  order().by('Date').by(T.id).
  fold().
  project('a','b').
    by(limit(local,1)).
    by(tail(local))

相关问题 更多 >