【发布时间】:2016-06-03 09:25:24
【问题描述】:
我有一个图形数据库,其中有用户和兴趣节点,它们通过 IS_INTERESTED 关系连接。我想查找用户未选择的兴趣。我写了这个查询,但它不起作用
OPTIONAL MATCH (u:User{userId : 1})-[r:IS_INTERESTED] -(i:Interest)
WHERE r is NULL
Return i.name as interest
根据对 SO 上类似问题的回答(如this one),上述查询应该可以工作。但是,在这种情况下,它返回 null。但是当运行以下查询时,它会按预期工作:
MATCH (u:User{userId : 1}), (i:Interest)
WHERE NOT (u) -[:IS_INTERESTED] -(i)
return i.name as interest
我不想运行上述查询的原因是因为 Neo4j 给出了警告:
此查询在断开的模式之间构建笛卡尔积。
如果查询的一部分包含多个断开连接的模式,则此 将在所有这些部分之间建立一个笛卡尔积。这可能 产生大量数据并减慢查询处理速度。尽管 偶尔打算,通常可以重新制定 避免使用此叉积的查询,可能通过添加 不同部分之间的关系或使用 OPTIONAL MATCH (标识符是:(i))
在我使用 OPTIONAL MATCH 查找不存在的关系的第一个查询中我做错了什么?
【问题讨论】:
标签: neo4j cypher graph-databases