2014-01-05 2 views
0

У меня есть график, который отображает финансовые отношения между компаниями - отношение должностных лиц, которые компании должны деньги для компаний. Я ищу уникальные отношения - круги, которые закрыты последними. Поэтому, если я должен вам деньги, и мы обнаруживаем, что каким-то образом вы должны мне деньги, я закрываю долг. Компании идентифицируются по номеру налога. Для этого я использую этот Cypher запрос:Neo4J найти уникальные результаты

start n=node(*) 
match p=n-[r:OWES*1..200]->n 
where HAS(n.taxnumber) 
return extract(s in relationships(p) : s.amount), 
     extract(t in nodes(p) : ID(t)), 
     length(p) ; 

Но я также получить результаты, как

Company1-Company2-company1-Company-3 

я показываю это приводит обратно в моей Java-приложение. Должен ли я скрыть эти результаты после того, как я проанализирую их в java-коде - результаты, когда одна компания отображается дважды. Это нормально, когда дело доходит до логики, но мне нужны результаты, когда компания показывается только один раз, мне не нужны результаты, когда я получаю одну и ту же компанию несколько раз. Как изменить мой запрос Cypher? Я хочу, чтобы компания в результатах могла быть только в начале и в конце результата, а не как-то кругом посередине.

ответ

2

Вы можете попробовать проверить узлы пути, чтобы не содержать ваш начальный узел.

start n=node(*) 
match p=n-[:OWES*1..200]->(m), (m)-[r:OWES]->n 
where HAS(n.taxnumber) 

AND NOT(n IN tail(nodes(p))) 

return extract(s in relationships(p) : s.amount) + r.amount, 
     extract(t in nodes(p) : ID(t)) + ID(n), 
     length(p) + 1; 

К сожалению, нет подстрочный в 1.8.2 и только tail(coll) не простой способ, чтобы исключить последний элемент из проверки. Вот почему я должен разбить p и исправить ваши скопления в конце.

+0

Когда я запускаю его как начало n = узел (*) соответствует p = n- [r: OWES * 1..200] -> n где HAS (n.taxnumber) И NOT (n IN nodes (p) [ 1 ..- 1]) return extract (s в отношениях (p): s.amount), extract (t в узлах (p): ID (t)), length (p); Я получаю ошибку с закрытой скобкой ... –

+0

Я использую Neo4j-cypher-1.8.2.jar в своей заявке –

+0

Я получаю сообщение об ошибке «[1 ..- 1]» этой части. –

Смежные вопросы