[英]Multiple relationships of the same type but with different properties between the same two nodes
[英]Create same relationships between nodes with different properties
我正在創建一個簡單的社交圖,用戶可以在其中創建帖子、標記它並對其發表評論。 我正在使用py2neo進行建模。 該模型將user
和post
作為節點。 用戶對TAGGED
進行了POSTED
、 post
或COMMENTED
。 在我的例子中,單個用戶可以在單個post
上創建多個tag
或comment
(就像那里的任何社交網絡一樣)。 根據我的模型,這需要多個TAGGED
或COMMENTED
關系但具有不同的屬性。 該模型是這樣構建的:
from py2neo.ogm import (
GraphObject,
Property,
RelatedTo,
RelatedFrom
)
class User(GraphObject):
__primarykey__ = 'name'
name = Property()
posts = RelatedTo('Post', 'POSTED')
comments = RelatedTo('Post', 'COMMENTED')
tags = RelatedTo('Post', 'TAGGED')
def __init__(self, name):
self.name = name
class Post(GraphObject):
# assumes __id__ as primary key because
# left undefined
title = Property()
users = RelatedFrom('User', 'POSTED')
comments = RelatedFrom('User', 'COMMENTED')
tags = RelatedFrom('User', 'TAGGED')
def __init__(self, title):
self.title = title
我運行以下命令來構建圖形:
user = User(name='john')
post = Post(title='Wow!')
user.posts.add(
post,
{'date': '2017-04-26'}
)
graph.push(user)
user.comments.add(
post,
{'caption': 'I know!', 'date': '2017-04-26'}
)
graph.push(user)
for tag in ['yellow', 'green']:
user.tags.add(
post,
{'tag': tag, 'date': '2017-04-26'}
)
graph.push(user)
我希望有兩個TAGGED
關系,如下所示:
但我看到情況並非如此:
那么我的問題是雙重的。 (1) 能否創建多個同類型不同屬性的關系? (2) 這是用例的最佳模型選擇嗎?
你可以使用 neo4jrestclient。 它允許您擁有多個相同類型的關系,而且它也很容易使用。 您可以使用以下代碼:
from neo4jrestclient.client import GraphDatabase
gdb=GraphDatabase("http://localhost:7474/db/data/")
user=gdb.nodes.create(name='john')
post=gdb.nodes.create(title='wow')
user.labels.add('User')
post.labels.add('Post')
u=gdb.labels.get('User')
p=gdb.labels.get('Post')
現在為多重關系
for tag in ['yellow', 'green']:
u.get(name='john')[0].relationships.create('TAGGED',p.get(id=0)[0],tag=tag,date='2017-04-26')
這應該做到。 .get 用於更新節點很像.push。 可以有更簡潔的方法來做到這一點,但你明白了。 文檔也很不錯。 https://readthedocs.org/projects/neo4j-rest-client/downloads/pdf/latest/
盡管 neo4j(以及大多數 neo4j 的編程接口,如 Cypher)確實支持一對節點之間相同類型的多個關系(可能具有不同的屬性集), py2neo
似乎不支持(請參閱本期)。
我建議您考慮使用其他方式從 Python 使用 neo4j ,例如官方支持的neo4j Python 驅動程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.