Graph 如何在gremlin中获取名为ID的属性
我在写一个小精灵的查询时得到了奇怪的结果。我可以很高兴地对节点的大多数属性使用has函数,例如“().has('name','verSignCzageXTension')。property('id')”将返回v5086。但是当我尝试使用带有属性id的has函数时,它永远不会返回true。例如“().has('id','v5086')。property('id')”不返回任何结果。有人知道为什么会这样吗Graph 如何在gremlin中获取名为ID的属性,graph,groovy,gremlin,Graph,Groovy,Gremlin,我在写一个小精灵的查询时得到了奇怪的结果。我可以很高兴地对节点的大多数属性使用has函数,例如“().has('name','verSignCzageXTension')。property('id')”将返回v5086。但是当我尝试使用带有属性id的has函数时,它永远不会返回true。例如“().has('id','v5086')。property('id')”不返回任何结果。有人知道为什么会这样吗 谢谢。在内部,Neo4j将所有ID存储为java.lang.Long对象。这只是id属性的特殊
谢谢。在内部,Neo4j将所有ID存储为
java.lang.Long
对象。这只是id
属性的特殊行为。所有其他属性都与其隐含的数据类型一起存储。这就是为什么has('name','verSignCzageXTension')
起作用的原因(因为name
属性被排除在这个针对id
的特殊行为之外)。我假设v5086
被类型转换为java.lang.Long
,从而失去了它的真正价值。这可以解释has('id','v5086')
Gremlin步骤后的零结果
AFAIK,id
属性是不可变的(不能更改)。如果您需要使用has
Gremlin步骤进行id
查找顶点,它看起来像has('id',5086L)
假设顶点id
是5086
,并且存储为java.lang.Long
值。额外的L
用于显式java.lang.Long
类型转换,如果不添加L
,Neo4j将假定java.lang.Integer
,并且您的小精灵步骤将再次导致零结果
最后,您可能希望将您的命名ID命名为其他名称,例如带有keyname
的属性
希望这能有所帮助。您能否提供更多详细信息,如您在其版本中使用的数据存储(Neo4j、OrientDb、TinkerGraph等)?好的,
id
是一个保留属性,通常是数字。你确定你的id
与现有的id
属性没有冲突吗?该属性会随着每个节点/边缘的添加而自动递增?我使用的是Neo4j 1.8,我一直是cypher查询中的id属性,因此我假设它与Neo4j中的任何内容都没有冲突。虽然我不知道它是否与gremlin使用的id冲突。如果是这样的话,有趣的是,当我请求属性时,它仍然会给我提供的值。也许更好的问题是,如果它从属性函数返回正确的值,是否有类似于has的函数使用属性返回的值?