这是在 Neo4J 2.0.0-M04 上运行的。这是数据和查询的链接,http://console.neo4j.org/?id =yybtki
查询的目的是从读过与 Tom 类似书籍的人那里找到 Tom 没有读过的书。
使用 FILTER 函数查询:
MATCH p1:Person-[:READS]->b1:Book<-[:READS]-p2:Person-[:READS]->b2:Book
WHERE p1.name = 'Tom' AND (p1-[:READS]->b1)
WITH COLLECT(b1) AS MyBooks, COLLECT(DISTINCT b2) AS OtherBooks
RETURN FILTER(x IN OtherBooks : NOT x IN MyBooks);
我已经设法使用 FILTER 函数成功运行查询,但想知道在 WHERE 子句中是否有更好的方法。
尝试类似下面的方法是行不通的。
MATCH p1:Person-[:READS]->b1:Book<-[:READS]-p2:Person-[:READS]->b2:Book
WHERE p1.name = 'Tom' AND NOT (p1-[:READS]->b1)
RETURN b2;