如何在gremlin中获取名为ID的属性

时间:2012-12-25 09:04:47

标签: graph groovy gremlin

在编写gremlin查询时,我得到了奇怪的结果。我很乐意为我的节点的大多数属性使用has函数,例如“()。has('name','VerisignCzagExtension')。property('id')”将返回v5086。但是当我尝试使用带有属性id的has函数时,它永远不会返回true。例如“()。has('id','v5086')。property('id')”不返回任何结果。任何人都知道为什么会这样?

感谢。

1 个答案:

答案 0 :(得分:2)

在内部,Neo4j将所有ID存储为java.lang.Long个对象。这仅是id属性的特殊行为。所有其他属性都与其隐含的数据类型一起存储。这就是has('name', 'VerisignCzagExtension')有效的原因(因为name属性被排除在id 的特殊行为之外。我假设v5086被类型转换为java.lang.Long,因此失去了它的实际价值。这可以解释has('id', 'v5086') Gremlin步骤后的零结果。

AFAIK,id属性是不可变的(无法更改)。如果您需要使用id Gremlin步骤对顶点进行has查找,假设顶点has('id', 5086L)id,则看起来像5086被存储为java.lang.Long值。额外L用于显式java.lang.Long类型转换,如果您不添加java.lang.Integer,则Neo4j将假定L,并且您的Gremlin步骤将再次导致零结果。

最后,您可能希望将您的命名ID称为其他内容,例如具有键name的属性。

希望这有帮助。