首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Neo4j:比较数组类型的关系属性

在Neo4j中,不能直接比较数组类型的关系属性

以下是一个使用Cypher查询语言比较数组类型关系属性的示例:

假设我们有一个简单的图,其中节点表示人,关系表示朋友关系:

代码语言:javascript
复制
(A:Person {name: 'Alice'})-[:FRIEND]->(B:Person {name: 'Bob'})
(A)-[:FRIEND]->(C:Person {name: 'Charlie'})
(B)-[:FRIEND]->(D:Person {name: 'David'})

我们想要找到与Alice和Bob都有共同朋友的人。我们可以使用以下Cypher查询:

代码语言:javascript
复制
MATCH (a:Person {name: 'Alice'})-[:FRIEND]-(commonFriend)-[:FRIEND]-(b:Person {name: 'Bob'})
RETURN DISTINCT commonFriend.name AS CommonFriends

这个查询首先找到Alice的朋友(commonFriend),然后找到这些朋友也是Bob的朋友。最后,返回共同朋友的名字。

如果你想要比较两个关系属性数组是否相等,你可以使用FILTERALL函数。例如,假设我们有一个表示兴趣的关系属性数组:

代码语言:javascript
复制
(A:Person {name: 'Alice'})-[:INTERESTED_IN]->(:Interest {name: 'Reading'})
(A)-[:INTERESTED_IN]->(:Interest {name: 'Traveling'})
(B:Person {name: 'Bob'})-[:INTERESTED_IN]->(:Interest {name: 'Reading'})
(B)-[:INTERESTED_IN]->(:Interest {name: 'Traveling'})

我们可以使用以下查询来找到具有相同兴趣的人:

代码语言:javascript
复制
MATCH (a:Person)-[:INTERESTED_IN]->(interestA), (b:Person)-[:INTERESTED_IN]->(interestB)
WHERE a <> b AND size((a)-[:INTERESTED_IN]->()) = size((b)-[:INTERESTED_IN]->())
WITH a, b, collect(interestA) AS aInterests, collect(interestB) AS bInterests
WHERE all(x IN aInterests WHERE x IN bInterests)
RETURN DISTINCT a.name AS PersonWithSameInterests, b.name AS Friend

这个查询首先找到具有相同兴趣数量的人,然后使用all函数比较两个数组是否相等。如果相等,则返回具有相同兴趣的人及其朋友。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

4分52秒

74-依赖注入之为数组类型的属性赋值

6分32秒

Spring-036-引用类型Autowired的required属性

9分35秒

JavaSE进阶-083-二维数组的length属性

12分12秒

75-依赖注入之为list集合类型的属性赋值

11分35秒

76-依赖注入之为map集合类型的属性赋值

7分31秒

72-依赖注入之为类类型的属性赋值(引用外部的bean)

11分47秒

42_尚硅谷_MyBatis_通过级联属性赋值解决多对一的映射关系

10分58秒

41_尚硅谷_MyBatis_通过resultMap解决字段名和属性名的映射关系

6分27秒

39_尚硅谷_MyBatis_通过字段别名解决字段名和属性名的映射关系

7分46秒

73-依赖注入之为类类型的属性赋值(级联方式和内部bean)

6分48秒

22_尚硅谷_大数据Spring_依赖注入_Map类型的属性.avi

8分16秒

JSP编程专题-30-自定义遍历所有类型数组的forEach标签

领券