neo4j:文件导入,关系匹配,创建新关系



我知道如何在SQL中实现这一点,但我很难用密码来思考如何做到这一点。。

基本上在主数据设置上工作,其中用户具有master_id(节点)并且需要使用现有的关系属性来确定master _id以便在master _id节点和位置节点之间创建新的关系。

当前已将主用户创建为包含master_id属性的节点。在主用户和品牌之间创建了一个关系,该关系的属性为brand_user_id。

我现在需要导入另一个文件,该文件包含brand_user级别的数据,但需要创建master_id和位置节点之间的关系。为了做到这一点,因为文件不包含master_id属性,我试图使用新文件基于与品牌的现有关系来查找master_ids,然后使用该master_id来创建与位置的新关系。

有这样的关系:

(m:Master{master_id:12345})-[:IS_BRAND_USER{brand_user_id:9876}]->(b:Brand{name:"Acme"})

有这个文件:

brand_user_id,location_id
9876,6

需要这种关系:

(m:Master{master_id:12345})-[:HAS_LOCATION]->(l:Location{id:6})

我的方法:

LOAD CSV WITH HEADERS FROM "file:///brand_user_ids.csv" as buid
MATCH (m:Master)-[r:IS_BRAND_USER{brand_user_id:buid.id}]->(b:Brand)
WITH m, buid.location_id AS location_id
MATCH (l:Location {id: location_id})
CREATE (m)-[:HAS_LOCATION {source: 'abcdef'}]->(l)

似乎运行了很长一段时间,一个小时后没有看到任何真正的进展,所以我想知道这是否是根本正确的方法,或者我是否无意中创建了一些可怕的交叉连接等价物。

问题是您试图输入关系的图。这总是需要大量的"扫描图表"。

现在,我不是你领域的专家,但你可能在这里缺少一种类型的节点。。。BrandUser。这可能有几个原因:

  1. 根据您的数据,Master可以有许多BrandUser id。每个品牌可能不止一个?您是否有其他在BrandUser级别上有意义的属性
  2. 位置数据很奇怪。你不同意BrandUser实际上有一个位置,而Master可能有很多位置吗

然而,最重要的原因是。。。如果您要一直在brand_user_id上输入图形(从可能的位置示例判断)。。。你有理由把它变成一个节点。

所以。。。这确实是一个建模问题。

希望这能有所帮助。

谨致问候,Tom

最新更新