【问题标题】:Why does Gremlin always return a result?为什么 Gremlin 总是返回结果?
【发布时间】:2018-07-11 19:12:44
【问题描述】:

我正在使用 Gremlin 向图表添加键。我有许多具有唯一 UUID 的关键顶点。

获取密钥的工作方式如下:

g.V().hasLabel("key").property("uuid", "foobar").count()

g.V().hasLabel("key").property("uuid", "foobar")

无论我为foobar 填写什么它总是返回一个对象并且计数总是=1

这怎么可能?

【问题讨论】:

    标签: gremlin tinkerpop tinkerpop3 gremlin-server


    【解决方案1】:

    这些 Gremlin sn-ps 都不涉及“获取密钥” - 它们实际上是设置所有带有标签“key”的顶点都拥有一个名为“uuid”的属性,其值为“foobar” ”。也许这就是你的意思?

    无论哪种方式,您都会得到“1”的count(),因为您的遍历返回了您设置属性的顶点,并且您的图中可能只有一个带有“键”标签的顶点。

    如果这不是您的意思,那么您可以改为获取键的值:

    g.V().hasLabel("key").properties("uuid","foobar").count()
    

    假设“uuid”和“foobar”都是带有“key”标签的单个顶点上的属性键,您将得到一个“2”的count()

    【讨论】:

    • 哦,男孩,这很明显....has(). properties () 之间的主要区别是什么。顺便说一句,谢谢:-)
    • has() 是一个过滤函数,意思是“在某些条件下找到我的元素”,properties() 更像是一个映射函数,意思是“为当前元素获取 Property 对象从中. 您应该尝试将 Gremlin 行中的每个步骤视为有一些对象(即 Traverser)通过它,然后该对象被过滤、转换、分支等。
    • 所以分开g.V().has('person','name','marko').properties()。第一步是V(),意思是“开始遍历所有顶点”。在has(),您可以想象来自V() 的第一个顶点经过。 has() 是一个过滤器,这个过滤器说,只有当它具有“人”标签和“marko”的“名称”属性时才允许通过顶点。然后,对于properties(),我们知道只有“marko”顶点到达此步骤,并且我们知道properties() 是一种映射(即变换)步骤。因此,您不会得到结果的“marko”顶点,而是所有该顶点的属性(名称、年龄等)
    • 谢谢,这非常很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2015-06-22
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多