我正在尝试从 2 个会话返回一组节点,条件是返回的节点不应出现在另一个会话(第三个会话)中。我正在使用以下代码,但它没有按预期工作。
MATCH (:Session {session_id: 'abc3'})-[:HAS_PRODUCT]->(p:Product)
UNWIND ['abc1', 'abc2'] as session_id
MATCH (target:Session {session_id: session_id})-[r:HAS_PRODUCT]->(product:Product)
where p<>product
WITH distinct product.products_id as products_id, r
RETURN products_id, count(r) as score
ORDER BY score desc
该查询应该返回存在于abc1 & abc2
但不存在于 中的所有节点abc3
。此查询不排除 中存在的所有产品abc3
。有什么办法可以让它工作吗?
更新1:
我试图简化它而不是UNWIND
这样
match (:Session {session_id: 'abc3'})-[:HAS_PRODUCT]->(p:Product)
MATCH (target:Session {session_id: 'abc1'})-[r:HAS_PRODUCT]->(product:Product)
where product <> p
WITH distinct product.products_id as products_id
RETURN products_id
即使这样也行不通。它返回所有存在的项目abc1
而不删除那些已经存在的项目abc3
。好像where product <> p
工作不正常。