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

使用Neo4j合并具有相同数据的节点

樊运乾
2023-03-14

这是我想做的:将用户连接到他们观看的视频,就像用户-

我是如何做到的:

LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
CREATE (u {user: line.user }) - [:VIEW] -> (v {video: line.video})
RETURN u, v

CSV文件有2列,标题为用户和视频。用户下面是一个标识每个用户的数字,视频下面是一个标识每个视频的数字。一个用户对一个视频。有时用户的名字会在列表中再次出现在不同的视频中。有时视频编号会再次出现,因为它是由不同的用户观看的。

但是,这将返回关系用户在每个关系中查看1个视频。因此,每个用户和视频都有多个节点。

我想做的:创建更多的网络或图形数据库,以查看所有用户正在查看哪些视频以及哪些用户正在观看哪些视频。为此,用户和视频不能像现在这样以一对一的关系连接。

我怎么能这样做?提前谢谢你!

共有2个答案

朱明知
2023-03-14

“合并”(MERGE)将确保在缺少节点/关系时创建节点/关系,或者使用它们。自第行起。用户和线路。视频似乎相当于主键,这应该可以很好地工作

LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
MERGE (u {user: line.user })
MERGE (v {video: line.video})
MERGE (u)-[:VIEW]->(v) 
RETURN u, v

有关合并的详细信息:http://neo4j.com/docs/2.2.2/query-merge.html

佟涵畅
2023-03-14

添加到Luanes答案。

您需要使用标签并提供约束!

LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
MERGE (u:User {user: line.user })
MERGE (v:Video {video: line.video})
MERGE (u)-[:VIEW]->(v) 
RETURN u, v

您需要在:User(User)和:Video(Video)`上创建一个约束,以使其正常工作。

如果导入的数据量较大(

而是将其拆分为三个查询:

CREATE CONSTRAINT ON (u:User) ASSERT u.user IS UNIQUE;
CREATE CONSTRAINT ON (v:Video) ASSERT v.video IS UNIQUE;

USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
WITH distinct line.user as user_data
MERGE (:User {user: user_data });

USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
WITH distinct line.video as video_data
MERGE (:Video {video: video_data });

USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
MATCH (u:User {user: line.user })
MATCH (v:Video {video: line.video})
MERGE (u)-[:VIEW]->(v);

确保使用最新版本(Neo4j 2.2.2)。

 类似资料:
  • 问题内容: 在一个软件中,我将两个数组与函数合并。但是我需要将相同的数组(当然,具有相同的键)添加到现有数组中。 问题: 如您所见,错过了。 那么,如何将 所有这些 具有相同的键合并? 问题答案: 您需要使用而不是。当然,数组中只能有一个等于的键,但是关联的值将是包含和的数组。

  • 问题内容: 我可以在其他具有相同列名的数据框的右边追加一个数据框吗 问题答案: 您可以像这样连接两个数据框。 如果您正在寻找联盟,则可以执行以下操作。 Spark 2.0,已重命名为

  • 问题内容: 我有一张表,上面有一些植物的记录。植物可以具有多个名称,该表将其显示为不同的记录。该表称为new_plantsname 这继续超过3000条记录 我想要的是将具有相同Plantid的记录组合在一起,并在不同的列中显示不同的名称: 等等 我也想将结果保存到新表中 问题答案: 基本上,这是一个(您未指定RDBMS)我假设MySQL并且它没有函数,因此您将需要使用带有语句的聚合函数来复制它。

  • 问题内容: 我有以下数据集。 https://drive.google.com/drive/folders/1NRelNsXQJ7MTNKcm-T69N6r5ZsOyFmTS?usp=sharing 如果列名称与工作表名称相同,则将所有内容合并在一起作为单独的列,以下是代码 运行以上代码后的数据 merged_data 如何合并条件文件? 健康)状况。 以上代码段中的价格1指向带有名称为int 7

  • 我有一个示例数据集,如下所示 Col1 Col2 Col3 A 1,2,3 A123 A 4,5 A456 A 1,2,3 A456 A 4,5 A123 我参考了一些解决方案,并尝试了以下方法。但它只追加单个列。

  • 问题内容: 我肯定在这里错过了一些简单的事情。尝试在熊猫中合并具有相同列名的两个数据框,但右侧的数据框具有一些左侧没有的列,反之亦然。 我试着加入外部联接: 但这产生了: 我还指定了一个要连接的单列(例如on =“ id”),但是它复制了除“ id”以外的所有列,例如attr_1_x,attr_1_y,这并不理想。我也将整个列列表(有很多)传递给了“ on”: 产生: 我想念什么?我想获得一个带有