![](/img/trans.png)
[英]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.