【问题标题】:py2neo: Get the get the end nodes from relationships and all incoming relationships without cypherpy2neo:从关系和所有传入关系中获取端节点,无需密码
【发布时间】:2017-03-31 21:18:34
【问题描述】:

我无法找到与节点有关系的节点。 我希望能够从所选节点中找到与所选节点有关系的节点。

Here is an example graph

这是示例图的代码:

from py2neo import Node, Relationship, Graph, NodeSelector, Path
from py2neo.ogm import *
graph = Graph(user = 'neo4j', password = 'neo4j')
graph.delete_all()

class Man(GraphObject):
    __primarykey__ = "name"
    name = Property("name")
    likes = RelatedTo("Woman", "LIKES")

class Woman(GraphObject):
    __primarykey__ = "name"
    name = Property("name")
    likes = RelatedTo("Man", "LIKES")

new_man = Man()
new_man.name = "John"
graph.push(new_man)

new_woman = Woman()
new_woman.name = "Sarah"
new_woman.likes.add(Man.select(graph, primary_value="John").first())
graph.push(new_woman)

new_man = Man()
new_man.name = "Joe"
new_man.likes.add(Woman.select(graph, primary_value="Sarah").first())
graph.push(new_man)

我想知道莎拉喜欢谁的名字:

sarah = Woman.select(graph, primary_value="Sarah").first()
sarah.likes._related_objects[0][0].name
# returns "John"
# or
list(sarah.__ogm__.related.values())[0]._related_objects[0][0].name
# returns "John"

如果不查看其他节点,我无法找到任何方法来获取喜欢莎拉的人的名字。这是可能的还是我在浪费时间?有没有更好的方法来做到这一点? 我是否坚持:

def get_who_likes_sarah():
    names = []
    for m in Man.select(graph):
        try:
            name = m.likes._related_objects[0][0].name
            if name == "Sarah":
                names.append(m.name)
        except:
            pass
    return names

【问题讨论】:

  • 你有解决方案吗?
  • 放弃并坚持我所拥有的。我的代码最终得到了这样的东西[m.name for m in Man.select(graph) for w in m.likes._related_objects if w[0].name == "Sarah"]

标签: python-3.x neo4j py2neo


【解决方案1】:

你应该这样做:

for rel in graph.match(start_node=sarah, rel_type="LIKES"):
    names.append(rel.end_node()["name"])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多