如何在Neo4j中查找拥有字符串类型属性的节点?附Users标签示例
在Neo4j中查找字符串类型属性节点的方法
一、查找所有拥有字符串类型属性的节点
如果你想找出数据库里任意节点中只要有一个属性是字符串类型的,可以结合keys()和type()函数来实现。keys(n)会返回节点n的所有属性名称,type(n[key])则能获取对应属性的数据类型。
对应的Cypher语句如下:
MATCH (n) WHERE any(key IN keys(n) WHERE type(n[key]) = 'STRING') RETURN n;
这个查询会遍历所有节点,检查每个节点的属性,只要有一个属性类型是字符串,就会返回该节点。
二、获取标签为Users且userid属性是字符串类型的节点
你提到的示例语句MATCH (n:Users) where n.userid IS string RETURN n语法是不对的,Neo4j并没有IS string这种判断方式,正确的做法是用type()函数来判断userid属性的类型。
基础查询语句
MATCH (n:Users) WHERE type(n.userid) = 'STRING' RETURN n;
这个语句会匹配所有带有Users标签的节点,并且筛选出userid属性类型为字符串的节点。
更严谨的版本(可选)
如果想确保节点确实存在userid属性(避免那些没有该属性的节点被误处理),可以加上exists()条件:
MATCH (n:Users) WHERE exists(n.userid) AND type(n.userid) = 'STRING' RETURN n;
因为如果节点没有userid属性,type(n.userid)会返回null,和'STRING'不相等,所以不加exists()也不会匹配到这类节点,但加上后逻辑更清晰。
内容的提问来源于stack exchange,提问作者Awais Tariq
相关产品推荐
相关产品推荐

