如何在一个 gremlin 查询或 Gremlin.Net 中获取带有顶点信息的属性 hasid/key
How to get properties hasid/key with vertexes info in one gremlin query or Gremlin.Net
我尝试在 Gremlin.Net 的后续查询中获取具有键或 ID 的属性,但 VertexProperty 中的顶点信息(ID 和标签)在结果中为空。
g.V().Properties<VertexProperty>().HasKey(somekey).Promise(p => p.ToList())
所以我尝试了另一种方式,但是 return class 是路径,我不得不写一个丑陋的类型转换代码。
g.V().Properties<VertexProperty>().HasKey(somekey).Path().By(__.ValueMap<object, object>(true))
有没有更好的方法来实现这个需求
我想基本上唯一缺少的就是the Project()
step。
为了找到所有具有某个 属性 键的顶点,然后得到它们的 id,标签,然后得到关于那个 属性 的所有信息,你可以使用这个遍历:
g.V().
Has(someKey).
Project<object>("vertexId", "vertexLabel", "property").
By(T.Id).
By(T.Label).
By(__.Properties<object>(someKey).ElementMap<object>()).
Promise(t => t.ToList());
这个 returns 一个 Dictionary
其中键是给 Project
步骤的参数。
如果您想按某个 属性 id 而不是 属性 键进行过滤,那么您可以采用非常相似的方式进行过滤:
g.V().
Where(__.Properties<object>().HasId(propertyId)).
Project<object>("vertexId", "vertexLabel", "property").
By(T.Id).
By(T.Label).
By(__.Properties<object>(someKey).ElementMap<object>()).
Promise(t => t.ToList());
在这两种情况下,这首先过滤顶点以仅具有具有我们正在寻找的属性的顶点。这样,我们可以在之后使用 Project()
步骤来取回所需的数据。
ElementMap
应该返回有关您想要的属性的所有信息。
但是请注意,这些遍历很可能需要在 JanusGraph 中进行完整的图形扫描,这意味着它必须遍历图形中的所有顶点。原因是这些遍历不能使用使它们更有效的索引。因此,对于较大的图,遍历可能不可行。
如果在第二次遍历中有可用的顶点 id 而不是 属性 id,那么只需将 g.V().Where([...])
替换为 g.V(id)
就可以使遍历更加高效.
我尝试在 Gremlin.Net 的后续查询中获取具有键或 ID 的属性,但 VertexProperty 中的顶点信息(ID 和标签)在结果中为空。
g.V().Properties<VertexProperty>().HasKey(somekey).Promise(p => p.ToList())
所以我尝试了另一种方式,但是 return class 是路径,我不得不写一个丑陋的类型转换代码。
g.V().Properties<VertexProperty>().HasKey(somekey).Path().By(__.ValueMap<object, object>(true))
有没有更好的方法来实现这个需求
我想基本上唯一缺少的就是the Project()
step。
为了找到所有具有某个 属性 键的顶点,然后得到它们的 id,标签,然后得到关于那个 属性 的所有信息,你可以使用这个遍历:
g.V().
Has(someKey).
Project<object>("vertexId", "vertexLabel", "property").
By(T.Id).
By(T.Label).
By(__.Properties<object>(someKey).ElementMap<object>()).
Promise(t => t.ToList());
这个 returns 一个 Dictionary
其中键是给 Project
步骤的参数。
如果您想按某个 属性 id 而不是 属性 键进行过滤,那么您可以采用非常相似的方式进行过滤:
g.V().
Where(__.Properties<object>().HasId(propertyId)).
Project<object>("vertexId", "vertexLabel", "property").
By(T.Id).
By(T.Label).
By(__.Properties<object>(someKey).ElementMap<object>()).
Promise(t => t.ToList());
在这两种情况下,这首先过滤顶点以仅具有具有我们正在寻找的属性的顶点。这样,我们可以在之后使用 Project()
步骤来取回所需的数据。
ElementMap
应该返回有关您想要的属性的所有信息。
但是请注意,这些遍历很可能需要在 JanusGraph 中进行完整的图形扫描,这意味着它必须遍历图形中的所有顶点。原因是这些遍历不能使用使它们更有效的索引。因此,对于较大的图,遍历可能不可行。
如果在第二次遍历中有可用的顶点 id 而不是 属性 id,那么只需将 g.V().Where([...])
替换为 g.V(id)
就可以使遍历更加高效.