Neo4j回答国会

时间:2018-01-04 21:56:22

标签: neo4j

我无法搞清楚事情。我试图提出一个neo4j问题回答:“在第114届国会上提出了多少法律,其中有多少是现在有效的?”。

目前,这是我的条款:

MATCH (b:Bill {active:"True"})-[r:PROPOSED_DURING]->(c:Congress {number:"114"})
RETURN count(b) AS count

现在我所缺少的是在这次大会期间提出的所有账单金额,即使它们现在不活跃。 现在我目前只显示当前有效的账单,但我还想显示在本次大会期间提出的所有账单(即使它们现在都处于非活动状态)。我得到了一个暗示,该条款已成功回答

SIZE

功能,但我不知道如何使用它。

2 个答案:

答案 0 :(得分:1)

如果您无法使用@ InverseFalcon答案提供的SIZE技巧(例如,如果多个节点类型与PROPOSED_DURINGCongress个关系),请点击此处是一个更直接的查询应该仍然有效:

MATCH (b:Bill)-[:PROPOSED_DURING]->(:Congress {number:"114"})
WITH COLLECT(b) AS proposed
RETURN
  SIZE(proposed) AS totalProposed,
  REDUCE(s = 0, b IN proposed |
    CASE b.active WHEN 'True' THEN s + 1 ELSE s END) AS activeProposed;

答案 1 :(得分:0)

您可以使用SIZE()来获取图形模式的实例数。还有一些我们可以寻找的额外优化。

如果:PROPOSED_DURING关系仅连接:Bill节点到:Congress节点,那么您可以使用SIZE()来获取:Congress节点上的关系程度,而无需实际遍历关系:

MATCH (c:Congress {number:"114"})
WITH c, size(()-[:PROPOSED_DURING]->(c)) as totalProposed
MATCH (b:Bill {active:"True"})-[:PROPOSED_DURING]->(c)
RETURN totalProposed, count(b) as activeProposed

请注意,我们能够获得关系的程度,因为我们不会在关系本身或关系另一端的节点上请求任何信息(标签,属性)。如果我们这样做了:size((:Bill)-[:PROPOSED_DURING]->(c)) as totalProposed那么它将需要遍历关系并在另一端对节点上的标签进行过滤,这将会更加昂贵。如果其他类型的节点除了:Bill可以是:PROPOSED_DURING一个国会,那么除了这条路线之外别无选择。