【问题标题】:Neo4j: Sum relationship properties where node properties equal Value A and Value B (intersection)Neo4j:求和关系属性,其中节点属性等于值 A 和值 B(交集)
【发布时间】:2014-11-21 03:13:27
【问题描述】:

基本上我的问题是:我如何对存在属性等于值 A 和值 B 的相关节点的关系属性求和?

例如:

我有一个简单的DB有如下关系:

(site)-[:HAS_MEMBER]->(user)-[:POSTED]->(status)-[:TAGGED_WITH]->(tag)

在 [:TAGGED_WITH] 上,我有一个名为“TimeSpent”的属性。通过使用以下查询,我可以轻松总结特定日期和用户所花费的所有时间:

MATCH (user)-[:POSTED]->(updates)-[r:TAGGED_WITH]->(tags)
WHERE user.name = "Josh Barker" AND updates.date = 20141120
RETURN tags.name, SUM(r.TimeSpent) as totalTimeSpent;

这会返回给我一个漂亮的表格,其中包含标签和在每个标签上花费的相关时间。 (即#Meeting 4.5)。但是,如果我想进行一些高级搜索并说“显示 ProjectA 的所有会议”(即#Meeting #ProjectA),就会出现问题。基本上,我正在寻找一个查询,我可以获取单个状态具有两个标签的所有关系(并且仅当它同时具有两个标签时)。然后我可以将该数字相加,以计算我在#ProjectA 中参加了多少次会议。

我该怎么做?

【问题讨论】:

    标签: neo4j cypher nodes graph-databases


    【解决方案1】:
    MATCH (updates)-[r:TAGGED_WITH]->(tag1 {name: 'Meeting'}),
          (updates)-[r:TAGGED_WITH]->(tag2 {name: 'ProjectA'})
    RETURN SUM(r.TimeSpent) as totalTimeSpent, count(updates);
    

    这应该找到所有标记有这两个东西的更新,并总结所有这些更新所花费的所有时间。

    【讨论】:

      【解决方案2】:

      要创建一个您可能需要一个或多个标签的通用解决方案,您可以使用类似这样的方法,将标签数组作为参数传递(并使用数组的长度而不是硬编码的2

      MATCH (user)-[:POSTED]->(update)-[r:TAGGED_WITH]->(tag)
      WHERE user.name = "Josh Barker" AND updates.date = 20141120 AND tag.name IN ['Meeting', 'ProjectA']
      WITH update, SUM(r.TimeSpent) AS totalTimeSpent, COLLECT(tag) AS tags
      WHERE LENGTH(tags) = 2
      RETURN update, totalTtimeSpent
      

      只要 tag.name 被索引,这应该很快。

      编辑 - 移除用户限制

      MATCH (update)-[r:TAGGED_WITH]->(tag)
      WHERE tag.name IN ['Meeting', 'ProjectA']
      WITH update, SUM(r.TimeSpent) AS totalTimeSpent, COLLECT(tag) AS tags
      WHERE LENGTH(tags) = 2
      RETURN update, totalTtimeSpent
      

      【讨论】:

      • 这不应仅限于 Josh Barker 和某个日期,OP 正在寻找所有此类帖子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 2014-04-15
      • 2020-01-07
      • 2022-10-03
      相关资源
      最近更新 更多