如何在Neo4j中使用谓词过滤一些东西?

时间:2014-03-09 10:09:14

标签: filter neo4j cypher

我有第一个查询:

MATCH (U:User)-[S:Has|Shout]->(P:Post)
WHERE U.user_id=1
RETURN U.username, P.post

上面的查询将返回user_id = 1的所有结果,如:

U.username  P.post
rioeduardo  tomorrow
rioeduardo  hurray
rioeduardo  lala
rioeduardo  hey
rioeduardo  nice
rioeduardo  testing

我有第二个查询:

MATCH (U:User)-[S:Shout]->(P:Post)<-[:Has]-(FU:User)
WHERE U.user_id=1
RETURN U.username, P.post

上面的查询将返回user_id = 1的所有结果,其他用户也会拥有它:

U.username  P.post
rioeduardo  tomorrow
rioeduardo  hurray
rioeduardo  lala
rioeduardo  hey

不,我想从user_id = 1中删除结果而其他用户也拥有它,结果将是:

U.username  P.post
rioeduardo  nice
rioeduardo  testing

我已经尝试过在Neo4j中使用谓词,但我什么也没得到。查询如下:

MATCH (U:User)-[S:Has|Shout]->(P:Post), filter=(U:User)-[:Shout]->(P:Post)<-[:Has]-(FU:User)
WHERE U.user_id=1 AND NONE (x IN nodes(filter) WHERE x.user_id = 1)
RETURN U.username, P.post

所以,请帮助我如何解决这个问题,如果你有其他方法,请告诉我(它不一定是谓词。) 感谢。

1 个答案:

答案 0 :(得分:1)

尝试以下

MATCH (U:User)-[S:Has|Shout]->(P:Post)
WHERE U.user_id=1 AND NOT (U:User)-[:Shout]->(P:Post)<-[:Has]-(:User)
RETURN U.username, P.post