#cypher #structr
#cypher #structr
Вопрос:
Я пробую Structr, который кажется отличным, но я сталкиваюсь с проблемой, когда я хочу перебирать возвращенную коллекцию и выводить html-элемент для каждого элемента в ней. Это немного усложняется тем фактом, что мне также нужно использовать merge_unique для коллекции, прежде чем я это сделаю, потому что старая версия neo4j Structr использует ограничения на комбинацию необязательных совпадений и сбора (отличное n).
Вот запрос, который я делаю в панели запросов cypher в Structr:
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. Вы пробовали последний снимок? Работает с Neo4j 3.0. Я также скоро опубликую ответ ниже.
Ответ №1:
Воспроизводя ваш запрос со следующими тестовыми данными, я получаю тот же результат (неразличимый список имен спонсоров).
Если я добавлю a distinct
в оператор Cypher, он вернет отдельную коллекцию спонсоров:
[...]
with c, collect(distinct p) as projects, collect(distinct(sp.name)) as sponsors
[...]
Обратите внимание, что коллекция в sponsors
уже является строковым массивом, поэтому вы не можете легко использовать Structr repeater (есть способ, но он более сложный).
Чтобы напрямую использовать привязку данных Structr, измените запрос, чтобы возвращать объекты ( sp.name
=> sp
) и создайте вложенный повторитель с запросом функции (в моем примере привязанный к элементу <b>:
[...]
with c, collect(distinct p) as projects, collect(distinct(sp)) as sponsors
[...]
Комментарии:
1. Спасибо. Это то, что я сделал. Мне действительно нравится Structr. Есть мысли о том, когда выйдет следующий релиз?
2. Вероятно, вокруг GraphConnect.