Neo4j节点属性包含原始json作为元数据

时间:2013-01-13 15:52:25

标签: json neo4j cypher

是否可以将节点属性作为json原始字符串并使用cypher对其进行过滤? 我有一个节点,其中包含一些已定义的属性和元数据(json原始字符串)。 我想选择或过滤那些元数据属性。 这是这样的:

START movie=node:TYPE_INDEX(Type = 'MOVIE') // Start with the reference
MATCH movie-[t:TAG]->tag 
WHERE collect(movie.Metadata).RatingPress > 3
RETURN distinct movie.Label

元数据是这样的:

{"RatingPress" : "0","RatingSpectator" : 3"}

我原本希望使用collect函数来调用这个属性:

collect(movie.Metadata).RatingPress

但是,当然它失败了......

这是一种将某个json字符串从一个节点属性与cypher绑定的方法吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

这违反了财产原则。为什么不直接在节点上设置JSON元数据中的属性?

但要回答你的问题:

不,cypher不了解JSON。

答案 1 :(得分:4)

我们将整个Node视为JSON blob。由于Neo4j不支持分层属性,因此我们在保存时将JSON展平为分隔的属性名称,并在读取时将它们展开。然后,您可以在(例如)属性名称“foo.bar.baz”上形成Cypher查询。查询往往看起来有点时髦,因为你需要使用单引号引用它们,但它有效。