Neo4j: Как я могу вернуть результаты запроса в зависимости от количества подключенных узлов? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть следующая схема:

(:Thread)
(:User)
(User)->[:PART_OF_THREAD]

В настоящее время ко всем потокам будет подключен дополнительный узел (:User), представляющий бота (который выполняет автоматические сообщения и т. Д.). Ниже приведен пример данных для каждого потока (2 пользователя + BotUser)

(Thread)<-[:PART_OF]-(User1)
(Thread)<-[:PART_OF]-(User2)
(Thread)<-[:PART_OF]-(BotUser)

ПРИМЕЧАНИЕ: У каждого пользователя будет тема только с BotUser. Например,

(Thread)<-[:PART_OF]-(User2)
(Thread)<-[:PART_OF]-(BotUser)

У меня возникают проблемы при попытке запросить поток User2 и BotUser. Поскольку BotUser существует в каждом потоке, если я запрашиваю поток между User2 и BotUser, neo4j вернет все потоки, в которых есть User2 и BotUser, это не то, что я хочу, я хочу вернуть JUST поток с BotUser и User2. Вот запрос, который я сейчас использую:

MATCH (user1:USER {id: User1Id}) -[:PART_OF_THREAD]->(thread:THREAD)<-[:PART_OF_THREAD]-(:USER {id: BotUserId})
RETURN thread

Как я могу вернуть поток с помощью BotUser и User1?

  • Нужно ли подсчитывать общее количество пользователей в потоке и возвращать ТОЛЬКО поток, ГДЕ users.length> 2?
  • Могу ли я еще что-нибудь сделать?

Если что-то не понятно, не стесняйтесь задавать вопросы

1 Ответ

0 голосов
/ 05 ноября 2018

Ваша логика правильна, самый быстрый способ подсчитать количество пользователей, являющихся частью потока, это получить степень отношения PART_OF в потоке:

MATCH (user1:USER {id: User1Id}) -[:PART_OF_THREAD]->(thread:THREAD)<-[:PART_OF_THREAD]-(:USER {id: BotUserId})
WHERE size((thread)<-[:PART_OF_THREAD]-()) = 2
RETURN thread
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...