Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 带有附加类型()运算符的WHERE NOT子句_Neo4j_Cypher - Fatal编程技术网

Neo4j 带有附加类型()运算符的WHERE NOT子句

Neo4j 带有附加类型()运算符的WHERE NOT子句,neo4j,cypher,Neo4j,Cypher,我正在尝试使用WHERE NOT和其他type()运算符编写查询 这是一个积极的匹配,可以正常工作,并返回2017年10月期间访问过俱乐部的用户 MATCH (user:User)-[visited]->(club:Club) WHERE type(visited) >= "20171001" and type(visited) <= "20171031" RETURN user; MATCH (user:User) WHERE NOT ( (user:User)-[vi

我正在尝试使用WHERE NOT和其他type()运算符编写查询

这是一个积极的匹配,可以正常工作,并返回2017年10月期间访问过俱乐部的用户

MATCH (user:User)-[visited]->(club:Club) 
WHERE type(visited) >= "20171001" and type(visited) <= "20171031"
RETURN user;
MATCH (user:User) 
WHERE NOT ( (user:User)-[visited]->(:Club) 
AND type(visited) >= "20171001" and type(visited) <= "20171031")
RETURN user;
但我无法正确设置查询格式,以返回2017年10月未访问过俱乐部的用户

MATCH (user:User)-[visited]->(club:Club) 
WHERE type(visited) >= "20171001" and type(visited) <= "20171031"
RETURN user;
MATCH (user:User) 
WHERE NOT ( (user:User)-[visited]->(:Club) 
AND type(visited) >= "20171001" and type(visited) <= "20171031")
RETURN user;
匹配(用户:用户)
其中不((用户:用户)-[visited]->(:Club)
和类型(已访问)=“20171001”和类型(已访问)正如您所观察到的,它是:

请注意,这里不能引入新变量

我认为最好的方法是列出10月份访问过某个俱乐部的用户,并将他们添加到列表中,然后获取所有用户,只返回那些不在列表中的用户

MATCH (user:User)-[visited]->(:Club)
WHERE type(visited) >= "20171001" AND type(visited) <= "20171031"
WITH collect(user) AS visitorsInOctober
MATCH (user:User)
WHERE NOT user IN visitorsInOctober
RETURN user
正如你所观察到的,它是:

请注意,这里不能引入新变量

我认为最好的方法是列出10月份访问过某个俱乐部的用户,并将他们添加到列表中,然后获取所有用户,只返回那些不在列表中的用户

MATCH (user:User)-[visited]->(:Club)
WHERE type(visited) >= "20171001" AND type(visited) <= "20171031"
WITH collect(user) AS visitorsInOctober
MATCH (user:User)
WHERE NOT user IN visitorsInOctober
RETURN user

这里有一种替代方法,对要排除的关系使用可选匹配,然后只保留不存在这种关系的行

MATCH (user:User)
OPTIONAL MATCH (user)-[visited]->(:Club)
WHERE type(visited) STARTS WITH "201710"
WITH user
WHERE visited IS NULL
RETURN user

这里有一种替代方法,对要排除的关系使用可选匹配,然后只保留不存在这种关系的行

MATCH (user:User)
OPTIONAL MATCH (user)-[visited]->(:Club)
WHERE type(visited) STARTS WITH "201710"
WITH user
WHERE visited IS NULL
RETURN user

感谢您的回复,我对必须先建立列表然后再进行评估并不感到兴奋,但您可能是对的。这种关系的格式是为了避免超级节点出现问题。这是Neo4J公司直接提出的建议。据我所知,这是最简单的方法。Neo4J的功能是,但是这些还不可用。关于避免超级节点问题的有趣评论。你有多少数据?谢谢你的回答,我对必须先建立列表然后进行评估并不感到兴奋,但你可能是对的。这种关系的格式是为了避免超级节点的问题。这是一个直接从Neo4J公司获得dvice。据我所知,这是最简单的方法。Neo4J将提供功能,但这些功能尚未提供。关于避免超级节点问题的有趣评论。您有多少数据?“问题是,它正在寻找已访问的关系,因此如果用户从未访问过俱乐部,他们将不匹配,因此不会作为10月份未访问的用户返回。“--即使对于访问过俱乐部的用户,此查询也不起作用:查询的
WHERE not
部分过滤掉
MATCH
子句选择的所有结果。“问题是,它正在寻找已访问的关系,因此如果用户从未访问过俱乐部,他们将不匹配,因此不会作为10月份未访问的用户返回。“--即使对于访问过俱乐部的用户,此查询也不起作用:查询的
WHERE not
部分过滤掉
MATCH
子句选择的所有结果。