当前位置: 首页 > 知识库问答 >
问题:

具有多个节点标签的py2neo ogm关系

东郭元魁
2023-03-14

我想使用py2neo的OGM来表示从一个节点类型到两个节点类型的关系。

from py2neo.ogm import GraphObject, Property, RelatedTo
from py2neo import Graph

class Person(GraphObject):
    name = Property()
    Owns = RelatedTo("Car")

class Car(GraphObject):
    model = Property()

g = Graph(host="localhost", user="neo4j", password="neo4j")

# Create Pete
p = Person()
p.name = "Pete"  

# Create Ferrari
c = Car()
c.model = "Ferrari"

# Pete OWNS Ferrari
p.Owns.add(c)

# Store
g.push(p)
class House(GraphObject):
    city = Property()

# Create House
h = House()
h.city = "New York"

# Pete OWNS House in New York
p.Owns.add(h)

# Update
g.push(p)

这段关系的“结束”应该指向一辆车,而不是一栋房子。但显然py2neo并不关心那么多,而是像预期的那样将所有东西都存储在数据库中:一个人、一辆车和一栋房子通过拥有关系连接起来。

现在的问题是使用上面的类来检索节点和关系。当节点属性正确加载时,关系不是:

p = Person.select(g).where(name="Pete").first()
for n in list(p.Owns):
    print type(n).__name__

这导致:

Car
Car

此行为与类对象一致。

我如何在py2neo.ogm中用同一个类建模“人拥有车”和“人拥有房子”?是否有任何已知的解决方案或变通办法,我可以在这里使用?

共有1个答案

颜志业
2023-03-14

问题是“owns”被设置为与“car”节点的关系。你需要建立另一种关系才能拥有房子。如果希望关系在Neo4j中具有“owns”标签,则需要填充RelatedTo函数的第二个变量。这在第3章的Py2Neo文档(http://Py2Neo.org/v3/)中有介绍。

class Person(GraphObject):
    name = Property()

    OwnsCar = RelatedTo("Car", "OWNS")
    OwnsHouse = RelatedTo("House" "OWNS")

class Car(GraphObject):
    model = Property()

class House(GraphObject):
    city = Property()

我确实想说,Rick的回答解决了一些我试图用Py2Neo OGM标记来解决的问题。所以谢谢瑞克!

 类似资料:
  • 假设我正在创建手机和平板电脑产品,标签为 然后是笔记本电脑。那么,下面

  • 我正在尝试做一个使用组合键的场景。我想有更多的公钥,这样我就可以用其中任何一个密钥来签署一个txn。 该场景的参考如下:https://docs.corda.net/api/kotlin/corda/net.corda.core.crypto/-composite-key/index.html 根据我的理解,deployNodes任务使用单个公钥生成节点。如果我偏离了轨道,请纠正我。

  • 我当前的firebase结构如下所示 本来我的保安看起来 这一切都很好,因为我可以通过 然而,我想给这个分支增加更多的安全性,这样用户就不能通过写操作(读取是可以的)更新前端的代码来修改其中的一些条目。我希望用户能够根据isAdmin标志修改这些条目,例如, companyId(读:auth!=null,写:isAdmin==true) 因为所有读取=auth!=无效的起初,我认为因为我能够读取所

  • 问题内容: 我正在尝试查询与所有给定标记集匹配的对象。 基本上,我希望用户能够添加越来越多的标签来过滤或“缩小”其搜索结果,就像newegg.com一样。 我的表结构是一个对象表,一个标签表和一个MANY:MANY关系表ObjectsTags。所以我有一个像这样的JOIN查询: 我尝试使用IN子句/条件,如下所示: 但是我了解到,这模拟了一系列OR,因此您向查询中添加的标签越多,得到的结果就越多,

  • 我还想按具有该标签的节点数对标签进行排序...

  • 根据我的Spring Data Neo4j 4(SDN4)类层次结构,我有很多Neo4j节点,每个节点有大约7个标签。 我应该担心我的应用程序的性能,因为每个节点的标签数量或Neo4j标签(以及它们在SDN 4中的使用)不会影响性能吗?