【发布时间】:2017-04-26 07:27:14
【问题描述】:
我正在创建一个简单的社交图谱,用户可以在其中创建帖子、标记帖子并对其发表评论。我正在使用py2neo 进行建模。该模型有user 和post 作为节点。 post 上的用户 TAGGED、POSTED 或 COMMENTED。就我而言,单个用户可以在单个post 上创建多个tags 或comments(就像那里的任何社交网络一样)。根据我的模型,这需要多个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) 这是用例的最佳模型选择吗?
【问题讨论】:
标签: neo4j relationship graph-databases py2neo