Graph 向neo4j添加新用户
一个全新的4J noob在这里说话 我喜欢创建一个图形来存储一组用户,典型的用户如下所示: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
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")
现在问题是,
(注意,新的更新将位置更改为“公共”并为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结构,以至于很难习惯图形。泰,这是一个伟大的设计伙伴,泰。