Я использую графическую базу данных, чтобы установить связь между папками, их дочерними элементами и пользователями (будь то владельцы или пользователи папки).
Вот пример моей структуры. Где оранжевый - папки, а синий - пользователи. -
Чего я хочу, чтобы мой запрос достиг: Он должен возвращать прямых потомков папки в запросе, и при этомпоэтому определите, является ли общая возвращаемая дочерняя папка общей.
Мой запрос
MATCH (:Folder { name: 'Nick Hamill' })-[:CHILD]->(children:Folder)
WITH children
OPTIONAL MATCH path = (children)<-[*]-(:User)
UNWIND RELATIONSHIPS(path) AS r WITH children, r
WHERE TYPE(r) = 'SHARES'
RETURN children AS model, COUNT(r) > 0 AS shared
Таким образом, запрос работает блестяще (возможно, необходима небольшая оптимизация?) когда есть связанный пользователь (см. ниже), однако, запрос не может вернуть какой-либо результат, если нет отношения с пользователем. Я лично не понимаю, почему это так, потому что это необязательное совпадение, и, конечно, счетчик может просто вернуть пустое значение?
╒══════════════════════════════════════════════════════════════════════╤════════╕
│"model" │"shared"│
╞══════════════════════════════════════════════════════════════════════╪════════╡
│{"name":"Dr. Denis Abshire","created_at":"2019-10-11 13:54:58","id":"c│true │
│f5e084f-d963-35d3-9c6f-fe29b86f6d43","updated_at":"2019-10-11 13:54:58│ │
│"} │ │
└──────────────────────────────────────────────────────────────────────┴────────┘
Запрос должен быть относительно понятен, но для ясности вот некоторые ожидаемыевыходы -
| Query Folder | Returned Folder | Shared? |
|----------------------|------------------|---------|
| Miss Dessie Oritz II | Nick Hamill | TRUE |
| Nick Hamill | Dr Denis Abshire | TRUE |
| Samara Russell | Shemar Huels PhD | FALSE |
| Shemar Huels PhD | Hazle Ward | FALSE |
Я использую neo4j 3.5.11 Community Edition. Я чувствую, что это должно быть довольно простым решением, я просто пересекаю границы моих чрезвычайно ограниченных знаний в области шифров.
Цени любую помощь!