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
Graph 向neo4j添加新用户_Graph_Neo4j_Cypher_Graph Databases - Fatal编程技术网

Graph 向neo4j添加新用户

Graph 向neo4j添加新用户,graph,neo4j,cypher,graph-databases,Graph,Neo4j,Cypher,Graph Databases,一个全新的4J noob在这里说话 我喜欢创建一个图形来存储一组用户,典型的用户如下所示: CREATE (node_1 {FullName:"Peter Parker",FirstName:"peter",FamilyName:"parker"}), (node_2 {Address:"Newyork",CountryCode:"US"}), (node_3 {Location:"Hidden"}), (node_4 {phoneNumber:11111}), (node_5 {Interne

一个全新的4J noob在这里说话

我喜欢创建一个图形来存储一组用户,典型的用户如下所示:

CREATE
(node_1 {FullName:"Peter Parker",FirstName:"peter",FamilyName:"parker"}),
(node_2 {Address:"Newyork",CountryCode:"US"}),
(node_3 {Location:"Hidden"}),
(node_4 {phoneNumber:11111}),
(node_5 {InternetEmailAddress:"peter@peterland.com")
现在问题是,

  • 每次执行此操作时,我会再添加5个节点。 我知道我需要使用唯一键,但我看到的所有示例都可以为特定节点使用唯一键。所以,如果用户已经存在,我如何确保用户不会被添加(我可以使用电子邮件地址作为唯一密钥)
  • 如果发生某些更改,如何更新节点。例如,一周后,我想更新图表,使其包含上一个图表的以下(无重复)


  • (注意,新的更新将位置更改为“公共”并为peter添加了一个新节点

    我认为您在这里对数据建模不正确-您将个人的每个属性设置为一个单独的节点,这不是一个好主意。这些节点之间没有任何链接,因此使用此数据模式,以后您将无法判断peter是什么帕克的地址是。你也没有使用节点标签,我认为这在这里会很有帮助

    关于更新节点的快速问题是,您必须
    匹配它们,然后使用
    设置属性来修改属性。因此,如果您有个人,您可以这样做:

    MATCH (p:Person { FullName: "Peter Parker" })
    SET p.Address = "123 Fake Street"
    RETURN p;
    
    但请注意,我正在对数据的结构方式进行假设。我将采用您提供的相同数据,这可能是一种更好的创建方式:

    CREATE (node_1:Person {FullName:"Peter Parker",
                           FirstName:"peter",
                           FamilyName:"parker",
                           Address:"Newyork",CountryCode:"US",
                           Location:"Hidden",
                           phoneNumber:11111,
                           InternetEmailAddress:"peter@peterland.com"});
    
    这个建议的不同之处在于,我将所有属性放在一个节点中(而不是每个节点一个属性),并将
    Person
    标签应用于该节点


    如果你像这样构造数据,那么我提供的更新查询就可以了。像你这样构造数据,就不可能更新Peter Parker的地址,因为你的
    节点_1
    节点_2

    之间没有任何关系,因为你反正有一大堆节点

    您建模为节点的一些数据可能是属性,正如另一个答案所示,一些数据可能被正确建模为节点,其中一个可能构成关系的一部分

    CREATE (p:Person{fullName:"Peter Parker"}), (s:State{name:"New York"}), (c:Country{code:"US"}),
    (p)-[:LIVES_IN{public:false}]->(s), (s)-[:IN_COUNTRY]->(c)
    
    位置公共/隐藏可以通过以下三种方式之一建模:作为个人的属性、个人和位置之间的属性或关系类型。要理解这一点,首先需要建立关系

    CREATE (p:Person{fullName:"Peter Parker"}), (s:State{name:"New York"}), (c:Country{code:"US"}),
    (p)-[:LIVES_IN{public:false}]->(s), (s)-[:IN_COUNTRY]->(c)
    
    您目前的地址是另一个节点,我认为这是正确的,但您可能需要两个节点,相关内容如下:

    (s:State)-[:IN_COUNTRY]-(c:Country)
    
    很明显,这是一个以美国为中心的模式,但是你可以很容易地扩展它

    现在,您可以创建一个关系中有生命的彼得:

    CREATE (p:Person{fullName:"Peter Parker"}), (s:State{name:"New York"}), (c:Country{code:"US"}),
    (p)-[:LIVES_IN]->(s), (s)-[:IN_COUNTRY]->(c)
    
    为了提高速度,您最好对两种关系进行建模,这两种关系可以是“公共中的生活”和“隐藏中的生活”,这意味着要执行您想要在上面执行的更新,您必须删除其中一种并创建另一种。但是,如果速度不是关键,那么在关系上使用属性也很常见

    CREATE (p:Person{fullName:"Peter Parker"}), (s:State{name:"New York"}), (c:Country{code:"US"}),
    (p)-[:LIVES_IN{public:false}]->(s), (s)-[:IN_COUNTRY]->(c)
    
    因此,您的完整问答:

    CREATE (p:Person {fullName:"Peter Parker",firstName:"peter",familyName:"parker", phoneNumber:1111, internetEmailAddress:"peter@peterland.com"}),
    (s:State {name:"New York"}), (c:Country {code:"US"}),
    (p)-[:LIVES_IN{public:false}]->(s), (s)-[:IN_COUNTRY]-(c)
    
    MATCH (p:Person {internetEmailAddress:"peter@peterland.com"})-[li:LIVES_IN]->()
    SET li.public = true, p.status = "jailed"
    
    当添加其他人时,您可能不希望重新创建州和国家,而是希望匹配他们,并且可能匹配他们,但我们将坚持创建

    MATCH (s:State{name:"New York"})
    CREATE (p:Person{name:"John Smith", internetEmailAddress:"john@google.com"})-[:LIVES_IN{public:false}]->(s)
    
    约翰·史密斯现在也隐晦地生活在美国,因为你可以通过状态节点来跟踪这种关系


    论文完成。

    我同意,但也许州/国家可以作为一个图表如何运行的例子?是的,可能有很多详细说明,但我不想过度设计答案。核心问题(如何进行更新)它非常简单,当然还有很多事情可以用图形结构来完成。如果OP想问另一个问题,我们可以跟进,但我不想用一篇关于图形建模的论文来回答“我该如何更新”的问题。:)我同意你们两个的观点,我非常习惯sql结构,以至于很难习惯图形。泰,这是一个伟大的设计伙伴,泰。