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