我正在尝试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,我预计这是您遇到的问题。如果你能指出我正确的方向,请提前感谢。
答案 0 :(得分:2)
使用以下测试数据重现您的查询,我得到相同的结果(赞助商名称的非独立列表)。
如果我在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
[...]