我无法搞清楚事情。我试图提出一个neo4j问题回答:“在第114届国会上提出了多少法律,其中有多少是现在有效的?”。
目前,这是我的条款:
MATCH (b:Bill {active:"True"})-[r:PROPOSED_DURING]->(c:Congress {number:"114"})
RETURN count(b) AS count
现在我所缺少的是在这次大会期间提出的所有账单金额,即使它们现在不活跃。 现在我目前只显示当前有效的账单,但我还想显示在本次大会期间提出的所有账单(即使它们现在都处于非活动状态)。我得到了一个暗示,该条款已成功回答
SIZE
功能,但我不知道如何使用它。
答案 0 :(得分:1)
如果您无法使用@ InverseFalcon答案提供的SIZE
技巧(例如,如果多个节点类型与PROPOSED_DURING
有Congress
个关系),请点击此处是一个更直接的查询应该仍然有效:
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一个国会,那么除了这条路线之外别无选择。