当前位置: 首页 > 知识库问答 >
问题:

Neo4j-Cypher返回1对1的关系

陆高峰
2023-03-14

使用neo4j 1.9。2,我试图在我的图中找到所有与另一个节点有一对一关系的节点。假设我的图表中有人,我想找到所有人,他们只有一个朋友(自2013年以来),而这一个朋友只有另一个人作为朋友,没有其他人。作为回报,我希望有所有这些“孤立”的朋友对。

我尝试了以下方法

START n=node(*) MATCH n-[r:is_friend]-m-[s:is_friend]-n
WHERE r.since >= 2013 and s.since >= 2013
WITH n, m, count(r), count(s)
WHERE count(r) = 1 AND count(s) = 1
RETURN n, m

但是这个查询并不是它应该做什么——它只是不返回任何内容。

注:两人之间只有一种关系。因此,一个朋友有一个新的关系,另一个是一个外向的关系。另外,这两个人可能有一些其他关系,比如“works\u in”之类的,但我只想检查两个人之间是否存在类型为*is\u friends*的1:1关系。

编辑:如果使用节点(*)作为起点,Stefan的建议是完美的。但是当尝试将此查询用于一个特定节点作为起始点(例如start n=节点(42))时,它不起作用。在这种情况下,解决方案会是什么样子?

更新:我仍然想知道这个szenario的解决方案:如何检查给定的开始节点是否与特定关系类型的另一个节点有1对1的关系。有什么想法吗?

共有1个答案

段干飞翮
2023-03-14

在这里,理解MATCH子句中路径的概念至关重要。路径是节点、关系、节点、关系、...节点的交替集合。有一个约束,即相同的关系永远不会在同一条路径上出现两次——否则就有出现无尽循环的危险。

这就是说,您需要确定您的域中的是否是朋友。如果它是定向的,你将区分a是b的朋友和b是a的朋友。从描述中,我假设是_friend是无向的,语句应该如下所示:

START n=node(*) MATCH n-[r:is_friend]-()
WHERE r.since >= 2013
WITH n, count(r) as numberOfFriends
WHERE numberOfFriends=1
RETURN n

您不必关心另一端,因为您做了一个节点(*),所以它被遍历了。请注意,当图形增长时,node(*)显然会变得更昂贵。

 类似资料:
  • 我有一个CSV数据集,我试图通过它在数据库中已经存在的两个节点类型(和)之间建立关系。 这是数据库信息- 问题是--无论我尝试哪个密码查询,它们都返回相同的东西--“无更改,无行”。 此查询只返回“no rows”。 我还尝试了该查询的一个变体,其中我没有使用函数,但这并没有什么不同。 为了确保节点存在,我从CSV文件中选择了随机单元格值,并使用子句来确保数据库中存在相应的和节点,并且找到了所有节

  • 问题内容: 我在上写了一个“双击”事件。我的JTable,即。myTaskTable填充有许多具有多列的行。我希望在双击的行之一时检索行索引。我不确定为什么总是返回索引-1导致异常。我在俯视什么吗?可能出什么问题了? 这就是我从-myTaskTable中检索所选行的索引的方式 谢谢! 编辑 这是代码: 问题答案: 使用事件而不是表选择获取行索引: 不适用于多个选定的行(允许多个选择),因为它将始终

  • 下面是我的上下文的概念示例: 我有一个抽象类,名为:(包含一个属性为String) 我有一个子类,名为: 我有一个子类,名为: 使用Spring-Data-Neo4j,我将a。 我创建了一个测试类,以便在图中插入一个和一个<整口井都发生了= 现在,我想进行这种密码查询: 检索id=123的用户 因此,我必须找到更有效的方法来检查所有用户节点(FacebookUser和TwitterUser的联合)

  • 问题内容: 结果始终为1: 我在phpMyAdmin中运行了$ sql查询,它返回3,所以查询不是问题。$ vote_total全局初始化为0,因此1来自某个地方。我还需要提供什么其他信息来帮助我? 谢谢,瑞安 问题答案: 返回选定的行数,而不是特定行的字段。使用来获取您与您的查询选择的行: 您还可以用来获取一行并获取特定字段: 这将获取第一行(从零开始)并返回第一字段(从零开始)。

  • 我正在写一个Android应用程序,它将连接到一个特定的WPA接入点,当连接时,它将发出一个超文本传输协议调用。它不会保存网络配置。我几乎读过关于连接到wifi网络的堆栈溢出的每一篇文章,但找不到适合我的答案。这是我用来连接的代码... 然而,netId总是-1。我曾在两款不同的手机上试用过(ICS:HTC Rezound和GingerBread:Motorola DroidX)。两者显示出完全相