如何使用Structr迭代cypher集合中的元素?

时间:2016-10-05 14:21:21

标签: cypher structr

我正在尝试Structr,这看起来很棒,但是我遇到了一个问题,我想循环遍历一个返回的集合并为其中的每个项输出一个html元素。在我这样做之前我还需要在集合上使用merge_unique这一事实有点复杂,因为旧版本的neo4j Structr在可选匹配和收集(不同n)的组合上使用了扼流圈。

以下是我在Structr的cypher查询窗格中发出的请求:

MATCH (c:Country) WHERE c.code = 'US'
Optional match (c)<-[:THING_IN]-(t:Thing)-[:THING_BELONGS_TO]-(p:Project)
optional match (p)<-[:SPONSORS]-(sp)
where p.status = "ACTIVE"
with c, collect(distinct p) as projects, collect(sp.name) as sponsors
RETURN {
    name:c.name, 
    code:c.code, 
    open_projects:size(filter(x IN projects WHERE x.status = "ACTIVE")),
    closed_projects:size(filter(x IN projects WHERE x.status <> "ACTIVE")),
    all_projects:size(projects),
    sponsors:sponsors
}

因此,“赞助商”作为项目赞助商所有名称的非独特集合返回。如果它们作为对象返回,它会循环通过赞助商,并显示$ {sponsor.name}(在使用sponsor = merge_unique(data.sponsors)创建数据绑定之后),但我不能只显示每个赞助商来自字符串变量的集合。

我不确定我是否正在解释这个问题,但如果您使用了Structr,我预计这是您遇到的问题。如果你能指出我正确的方向,请提前感谢。

1 个答案:

答案 0 :(得分:2)

使用以下测试数据重现您的查询,我得到相同的结果(赞助商名称的非独立列表)。

Data

如果我在Cypher语句中添加distinct,它会返回赞助商的不同集合:

[...]
with c, collect(distinct p) as projects, collect(distinct(sp.name)) as sponsors
[...]

请注意,sponsors中的集合已经是一个字符串数组,因此您无法轻松使用Structr转发器(这样做会更复杂)。

要直接使用Structr的数据绑定,请修改查询以返回对象(sp.name =&gt; sp)并使用函数查询创建嵌套转发器(在我的示例中绑定到&lt; b&gt;元素:

[...]
with c, collect(distinct p) as projects, collect(distinct(sp)) as sponsors
[...]

enter image description here