查找与节点列表有关系的节点
Find node that has relationships with a list of nodes
假设我有节点USERs
和节点CARs
。它们可以通过关系LIKE
连接。
我想通过USERs
的给定列表返回所有LIKEd
的CARs
。
当前我有这个查询:
MATCH (c:CAR)<-[r:LIKES]-(u:User)
WHERE u.username IN ['Sara', 'John'] RETURN e, u
返回Sara, John或两者都喜欢的所有汽车。我想把它限制在只有双方都喜欢的汽车。
更新:这是我到目前为止想到的,但这种方法不允许我使用名称数组作为输入,我可以使用它,但我希望找到一个可以将数组作为参数的解决方案,任何帮助都非常感谢。
MATCH (c:CAR)
WHERE (c)<-[:LIKES]-(:User {username: 'Sara'})
AND (e)<-[:LIKES]-(:User {username: 'John'})
return c
我想这个查询会满足你的需要:
MATCH (user:USER) WHERE user.username IN ['Sara', 'John']
WITH COLLECT(id(user)) AS user_ids
MATCH (user:USER)-[:LIKES]->(car:CAR)
WHERE id(user) IN user_ids
WITH car, user_ids, COLLECT(id(user)) as ids_of_users_that_like_car
WHERE ALL(user_id IN user_ids WHERE user_id IN ids_of_users_that_like_car)
RETURN car
有点棘手。我发现最简单的方法是利用这个:
ALL(x IN y WHERE EXISTS(relationship))
假设萨拉、约翰和比尔的图表,其中三人都喜欢野马汽车,约翰和比尔喜欢Pintos,则此代码将返回野马汽车,这是列表中所有用户唯一喜欢的汽车:
WITH ['Sara', 'John', 'Bill'] AS usernames
MATCH (c:CAR)
WHERE ALL(username IN usernames WHERE EXISTS((:User{name:username})-[:LIKES]->(c)))
RETURN c
编辑:或者,您可以尝试这样做,首先匹配列表中的用户,匹配这些用户喜欢的汽车,然后将其缩小到只有所有这些用户喜欢的汽车。
MATCH (u:User) WHERE u.name IN ['Sara', 'John', 'Bill']
WITH u, COLLECT(u) AS users
MATCH (u)-[:LIKES]->(c:CAR)
WHERE ALL(user IN users WHERE EXISTS((user)-[:LIKES]->(c)))
RETURN c
您将需要在实际数据集上配置文件,以查看哪种效果最好。
相关文章:
- 有条件更新d3.js力图中节点的最佳方法
- 节点模块依赖关系
- JavaScriptV5中的绑定和JQuery之间有任何关系吗
- 节点.js表单更新有和没有 ajax
- 在这种情况下,我应该如何在余烬中放置我的模型有很多关系
- 如何确定父节点是否有子节点
- 是否有一种基于“查询”来查询Neo4j中的节点的方法;dateProperty”;
- 有许多关系创建记录 - 为什么未定义
- 从显示节点关系的csv文件中获取连接节点的数量
- fancybox/jQuery:为什么可以'我点击了一个与粉丝盒有关系的按钮后就放弃了
- 在其他脚本之前或之后加载html5shivJS有关系吗?(页面加载时间)
- 浏览器和节点有什么区别
- 从JSON中获取值-节点有空间
- 如果我追加的内容似乎只依赖于.append()调用,那么在数据连接期间我将哪个项传递给d3.selectAll()有关系
- 扩展一个节点,直到它的子节点有一个兄弟节点
- 逐行读取文本文件.使用什么浏览器有关系吗?
- 我在输入元素上列出下列内容的顺序有关系吗?
- 推送节点应用到heroku节点有问题./bin/www
- 我应该设置什么大小的 MaxJsonLength?有关系吗
- 查找与节点列表有关系的节点