Neo4j 密码查询没有得到结果
我对密码有疑问,我不知道怎么执行 找一份没有人喜欢的书的清单 我编写了以下查询Neo4j 密码查询没有得到结果,neo4j,cypher,Neo4j,Cypher,我对密码有疑问,我不知道怎么执行 找一份没有人喜欢的书的清单 我编写了以下查询 MATCH (b1:Book),(R:Reader) WITH R,b1 OPTIONAL MATCH (b1)--(L:LIKES)--(R) WHERE L IS NULL RETURN b1.title 我得到了一些结果,但我认为这是错误的 当我执行下面的查询时,我可以在图中看到关系 匹配(b1:书),(R:读卡器) 用R,b1 可选匹配(b1)--(L:喜欢)--(R) 其中L为空 返回b1,R 2)
MATCH (b1:Book),(R:Reader)
WITH R,b1
OPTIONAL MATCH (b1)--(L:LIKES)--(R)
WHERE L IS NULL
RETURN b1.title
我得到了一些结果,但我认为这是错误的
当我执行下面的查询时,我可以在图中看到关系
匹配(b1:书),(R:读卡器)
用R,b1
可选匹配(b1)--(L:喜欢)--(R)
其中L为空
返回b1,R
2) 找到所有没有共同喜欢的书的人
我没能解决这个问题。如果你只是在找没人喜欢的书,那么你根本不需要看人,只需要看书。下面是一个查询,用于返回无人喜欢的书籍列表
MATCH (b:Book)
WHERE NOT (b)<--(:LIKES)
RETURN b
你实际上有两个问题。这些答案可能适用于您: (1) 查找所有
读者不喜欢的书籍
:
MATCH (b:Book)
WHERE NOT EXISTS((b)<-[:LIKES]-(:Reader))
RETURN b;
使用可选匹配
,因此也将考虑不喜欢书籍的阅读器
s。APOC函数用于获取两个列表的交集。问题是找到所有没有共同喜欢的书的人。答案不应该包含两个人。我是说两个人
MATCH (b:Book)
WHERE NOT EXISTS((b)<-[:LIKES]-(:Reader))
RETURN b;
MATCH (r:Reader)
OPTIONAL MATCH (r)-[:LIKES]->(b:Book)
WITH r, COLLECT(b) AS books
WITH COLLECT({r: r, books: books}) AS data
RETURN REDUCE(s = [], i1 IN RANGE(0, SIZE(data)-2) |
s + REDUCE(t = [], i2 IN RANGE(i1+1, SIZE(data)-1) |
CASE WHEN SIZE(apoc.coll.intersection(data[i1].books, data[i2].books)) = 0
THEN t + [data[i1], data[i2]]
ELSE t END
)
) AS dissimilar_pairs