Gremlin / TinkerPop-propertyMap()具有值,但Vertex.properties()为空

时间:2019-03-27 23:26:48

标签: graph-databases gremlin tinkerpop tinkerpop3

当我执行g.V().propertyMap()时,我可以将属性存储在顶点上。但是,当我实际迭代g.V()并尝试自己获取属性时,似乎没有任何内容。

这是一个代码示例:

    System.out.println("propertymap: " + g.V().propertyMap());
    g.V().propertyMap().forEachRemaining(e -> System.out.println(e.toString()));
    Iterator<Vertex> vi = g.V();
    while (vi.hasNext()) {
        Vertex vertex = vi.next();
        System.out.println("keys for " + vertex.label() + ": "
                + vertex.keys()
                + " properties.hasNext: "
                + vertex.properties().hasNext());
    }

和相应的输出:

propertymap: [GraphStep(vertex,[]), PropertyMapStep(property)]
{Name=[vp[Name->Justin]]}
{Name=[vp[Name->Bob]]}
keys for Person: [] properties.hasNext: false
keys for Person: [] properties.hasNext: false

如您所见,forEachRemaining调用能够正确输出属性键到VertexProperty的映射,该键将键映射到值。

但是,我手动迭代同一组顶点g.V()的代码根本找不到任何属性。

我想我对正在发生的事情有一些基本的误解(刚开始学习如何使用它),希望对我的缺失有所启发。

1 个答案:

答案 0 :(得分:1)

在文档中找到答案! https://tinkerpop.apache.org/docs/current/reference/#_properties_of_elements

  

对于基于字节码的请求,图元素具有引用分离,因此仅返回元素的ID和标签。尽管这种方法减轻了脚本方法暴露的潜在性能问题,但是遵循特定于请求应用程序所需数据的做法仍然很重要,因为如果没有该声明,数据就不会到达客户端。 / p>

似乎远程服务器返回的精简结果不包含未明确请求的任何属性。令我惊讶的是,对于像我这样的初学者来说,这似乎是一个普遍的问题(几乎不可能调试),这很难找到答案。