簡體   English   中英

在具有不同屬性的節點之間創建相同的關系

[英]Create same relationships between nodes with different properties

我正在創建一個簡單的社交圖,用戶可以在其中創建帖子、標記它並對其發表評論。 我正在使用py2neo進行建模。 該模型將userpost作為節點。 用戶對TAGGED進行了POSTEDpostCOMMENTED 在我的例子中,單個用戶可以在單個post上創建多個tagcomment (就像那里的任何社交網絡一樣)。 根據我的模型,這需要多個TAGGEDCOMMENTED關系但具有不同的屬性 該模型是這樣構建的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM