Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j-模型节点和关系_Neo4j_Model_Cypher - Fatal编程技术网

Neo4j-模型节点和关系

Neo4j-模型节点和关系,neo4j,model,cypher,Neo4j,Model,Cypher,我以{公司:[c1,c2,c3],名称:[d1,d2,d3]}的格式获得了100000名员工数据,其中c1是员工的第一家公司,c2是第二家公司,c3是第三家公司。。。 这同样适用于雇员在这些公司的职务。 这里的切换是指员工从c1->c2或d1->d2切换 我希望用neo4j对此进行建模,以回答以下问题: 获取公司开关,例如c1->c2,c2->c3 获取d1->d2、d2->d3等的指定开关 对于公司开关c1->c2,什么是名称开关d1->d2 我尝试了这段代码,但即使我已经建立了索引,它也会一

我以{公司:[c1,c2,c3],名称:[d1,d2,d3]}的格式获得了100000名员工数据,其中c1是员工的第一家公司,c2是第二家公司,c3是第三家公司。。。 这同样适用于雇员在这些公司的职务。 这里的切换是指员工从c1->c2或d1->d2切换

我希望用neo4j对此进行建模,以回答以下问题:

  • 获取公司开关,例如c1->c2,c2->c3
  • 获取d1->d2、d2->d3等的指定开关
  • 对于公司开关c1->c2,什么是名称开关d1->d2
  • 我尝试了这段代码,但即使我已经建立了索引,它也会一直运行

    CREATE CONSTRAINT ON (u:User) ASSERT u.id IS UNIQUE;
    CREATE CONSTRAINT ON (n:Company) ASSERT n.name IS UNIQUE;
    CREATE CONSTRAINT ON (d:Designation) ASSERT d.name IS UNIQUE;
    CREATE INDEX ON :Company(type),
    
    USING PERIODIC COMMIT 1000
    LOAD CSV WITH HEADERS FROM "file:/positions.csv" AS row
    WITH row
    
    // user
    MERGE (u:User {id: row.user})
    ON CREATE SET u.id = row.user
    //comp
    MERGE (n:Company {name:row.name})
    ON CREATE SET n.name = row.name, n.type = row.type
    
    
    
    // ---------------------------  Approach 2
    CREATE (p:Position{user: row.user, duration: toFloat(row.duration),     sequence:toInt(row.sequence)})
    CREATE (p)-[:AT]->(n)
    // optionally build Designation
    FOREACH(c1 IN (CASE WHEN row.type = 'c' THEN [1] else [] END) |
    // maybe check for empty
    //title
    MERGE (d:Designation {title:row.title})
    ON CREATE SET d.title = row.title
    CREATE (p)-[:AS]->(d)
    )
    WITH row 
    
    MATCH (u:User{id:row.user})
    MATCH (p:Position{user: u.id, sequence:0})
    CREATE (u)-[:NEXT]->(p)
    WITH row, p
    // todo - link sequence 0 position
    MATCH (p:Position {user: row.user})
    WITH p ORDER BY p.sequence
    WITH COLLECT(p) AS positions
    FOREACH(i in RANGE(0, length(positions)-2) | 
    FOREACH(pos1 in [positions[i]] | 
        FOREACH(pos2 in [positions[i+1]] | 
          CREATE UNIQUE (pos1)-[:NEXT]->(pos2))))
    

    这里的顺序是用户/员工持有的职位的顺序。这里是一个如何对数据建模的示例,以及对用例的查询

    此示例数据模型使用由
    历史关系
    分隔的
    作业
    节点的“链”来记录员工的工作历史。最近的工作直接附加到员工(也通过
    历史记录
    关系)。每个
    作业
    节点与
    公司
    节点有一个关系,与
    指定
    节点有另一个关系

    创建示例数据
    创建
    (c1:公司{id:123,名称:'Acme Corp.}),
    (c2:公司{id:321,名称:'皮奥里亚银行'}),
    (c3:公司{id:444,名称:'合并罐'}),
    (d1:名称{id:234,头衔:'助理书记'}),
    (d2:名称{id:345,标题:'办事员'}),
    (d3:名称{id:456,标题:'首席办事员'}),
    (e1:Employee{id:123456789,姓名:'Fred Murphy'}),
    (c1)(d1),
    (c2)(d2),
    (c3)(d3),
    (e1)-[:HISTORY]->(j3)-[:HISTORY]->(j2)-[:HISTORY]->(j1);
    
    获取公司更改(带开始日期):
    MATCH p=(n)您的问题的术语非常模糊,很可能会被关闭。例如,“指定”和“开关”是什么意思?请详细解释您的用例和数据模型,以便其他人理解。另外,如果你有现有的密码,也要显示出来。谢谢你的回复,用相关的术语编辑。你有没有尝试过为你的数据建模?如果是这样,请分享它们,以及你所面临的挑战。如果您没有,那么请分享您对正在考虑的方法的任何想法。
    
    CREATE
      (c1:Company {id: 123, name: 'Acme Corp.'}),
      (c2:Company {id: 321, name: 'Bank of Peoria'}),
      (c3:Company {id: 444, name: 'Consolidated Cans'}),
      (d1:Designation {id: 234, title: 'Assistant Clerk'}),
      (d2:Designation {id: 345, title: 'Clerk'}),
      (d3:Designation {id: 456, title: 'Head Clerk'}),
      (e1:Employee {id: 123456789, name: 'Fred Murphy'}),
    
      (c1)<-[:AT]-(j1:Job {started: 123456789})-[:AS]->(d1),
      (c2)<-[:AT]-(j2:Job {started: 234567890})-[:AS]->(d2),
      (c3)<-[:AT]-(j3:Job {started: 345678901})-[:AS]->(d3),
    
      (e1)-[:HISTORY]->(j3)-[:HISTORY]->(j2)-[:HISTORY]->(j1);
    
    MATCH p=(n)<-[:HISTORY*]-(e1:Employee {id: 123456789})
    WHERE NOT ()<-[:HISTORY]-(n)
    WITH NODES(p)[0..-1] AS jobs
    UNWIND jobs AS job
    MATCH (job)-[:AT]->(c)
    RETURN c, job.started;
    
    MATCH p=(n)<-[:HISTORY*]-(e1:Employee {id: 123456789})
    WHERE NOT ()<-[:HISTORY]-(n)
    WITH NODES(p)[0..-1] AS jobs
    UNWIND jobs AS job
    MATCH (job)-[:AS]->(d)
    RETURN d, job.started;
    
    MATCH p=(n)<-[:HISTORY*]-(e1:Employee {id: 123456789})
    WHERE NOT ()<-[:HISTORY]-(n)
    WITH NODES(p)[0..-1] AS jobs
    UNWIND jobs AS job
    MATCH (c)<-[:AT]-(job)-[:AS]->(d)
    RETURN c, d, job.started;