【问题标题】:Bidirectional Data modeling issue in neo4jNeo4j 中的双向数据建模问题
【发布时间】:2015-02-23 11:46:19
【问题描述】:

我有两个节点,A 和 B, A 与 B 对话,B 与 A 对话,(A)-[:talksTo]-(B)

A 对 B 有情感值,B 对 A 有情感值。

那么问题来了,我需要 A 到 B 关系来存储 B 到 A 关系也想要存储的值(相同的键)。

所以我会尝试做一些查询,例如 MATCH (A:person)-[:talksTo]-(B:person) where A.sentiment

所以这里 A 对 B 的情绪将不同于 B 对 A 的情绪,因此需要分离。

我尝试使用唯一的键名来指定方向 - 但这会使查询变得困难,除非我可以使用通配符 ex 进行查询:... where A.Asentiment

我能想到的另一种方法是制作两个不同的图表,1)A 与 B 图表对话,B 与 A 图表对话......但这会使查询变得棘手,因为我可能会返回多个节点单节点查询或者我是否必须将单节点键:值更新为其他内容。我希望每个人有一个节点名称。

有什么想法吗?

【问题讨论】:

  • 我有点困惑。是节点上的情感值还是关系上的?当您说 A.sentiment 时,这意味着它在节点上。
  • 你是对的,我使用了误导性的符号。 A.这里的情绪是指对B关系的情绪。所以应该是(A)->[R:talksTo {sentiment:'10'}]->(B),其中情绪变量是问题所在。任何两个节点之间不能有超过一条边,并且 A 想用一些变量与 B 交谈,这些变量与 B 想要与 A 交谈的变量相同。我目前通过创建多个节点来解决这个问题,方法是 (Aout)-[:talksTo]->(Bin), (Bout)-[:talksTo]->(Ain);但我想知道是否有更好的解决方案
  • 您绝对应该能够有两个关系,每个关系的方向相反,但仍然在相同的两个节点之间。你试过了吗?它会给你一个错误吗?
  • 看看这篇文章,它可能会对 Neo4j 中的双向关系有所了解:graphaware.com/neo4j/2013/10/11/…
  • 是的,我厌倦了它,它用新的关系取代了旧的关系。我认为这是不可能的,并且制作多个节点是唯一的方法(不要让查询变得如此混乱)。事实上,@Michal 提供的链接上发布的第一条评论(在页面底部)。谈到这个问题

标签: neo4j data-modeling key-value bidirectional-relation


【解决方案1】:

我不知道这是一个解决方案,但我认为我理解的不够多,所以它可能会成为更好理解的陪衬:

MATCH (A:Person)-[dir1:talksTo]->(B:Person), (A)<-[dir2:talksTo]-(B)
WHERE dir1.sentiment < 2
RETURN A, B

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2014-01-30
    • 2014-06-06
    • 2012-10-10
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多