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

Gremlin Python:按字母数字顺序选择日期最早的顶点,python,graph-databases,gremlin,amazon-neptune,Python,Graph Databases,Gremlin,Amazon Neptune,我使用海王星作为我的图形数据库 我有一个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': {<

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

我有一个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'}}]
我得到一个错误:

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"}

出现该错误的原因是,您试图将
valueMap()
的结果作为图形
元素处理,因为
by('Date')
语法只对
元素起作用。根据您想要执行的操作的描述,我认为您可以将遍历简化为:

g.V('633378c3-b016-433a-a3ca-c1662982f970','6e5db9a0-2946-4d98-9657-07a3fe825598'). 
  order().by('Date').by(T.id).
  limit(1).
  valueMap(True).toList()
我假设“字母数字顺序中的一个”是指UUID,这就是为什么我用
T.id
添加了第二个
by()
调制器的原因

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

g.V('633378c3-b016-433a-a3ca-c1662982f970','6e5db9a0-2946-4d98-9657-07a3fe825598'). 
  order().by('Date').by(T.id).
  fold()
并分别使用
limit(local,1)
tail(local)
按位置访问它们。使用相同的方法,您还可以将它们映射到一个
映射中
project()

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))

这管用!与其将其转换为列表,不如将第一个和第二个结果存储为变量?我想将一组查询批处理在一起,这样如果我可以在以后的查询中调用这些变量,那么效率会更高。你是说你会有成对的ID进行查询吗?我不确定我是否遵循了您的要求。例如g.V('633378c3-b016-433a-a3ca-c1662982f970','6e5db9a0-2946-4d98-9657-07a3fe825598')。order().by('Date').by(T.id)现在将按排序顺序返回两个顶点。我想将第一个顶点保存为变量“a”,第二个顶点保存为变量“b”,因为我知道“a”将是最早的/字母数字顶点。我指的是gremlin中的变量,而不是python中的变量,因为我想去掉toList()和批处理几个查询,并跳过中间的python步骤。您打算批处理后面的查询的目标是什么?您打算在以后的遍历中以某种方式使用这两个变量吗?或者,您是说您正在批处理与您在问题中所遇到的相同类型的逻辑,换句话说,在给定逻辑
order().by('Date').by(T.id)
的情况下,“id对”需要解析?
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))