Чтобы научить себя neo4j, я смоделировал некоторые поведения в игре, в которую играю.
Я создал базу данных neo4j со схемой: Моя схема базы данных
Итак, у Платформы есть Оборудование, у которого есть Режимы.В игре платформы могут взаимодействовать, когда у них общий режим.Любой объект в игре может быть затронут событиями во времени, что делает их неработоспособными.В базе данных графа эти события моделируются как события, которые могут влиять на один или несколько узлов.
Я создал запрос, который позволяет мне спросить «как сеть выглядит в год {год}», чтоработает, говоря, возвращает все узлы, которые не имеют связи с событием:
MATCH (any)
OPTIONAL MATCH (any)--(event:Event)
WHERE event.year < 2031
WITH any, event
WHERE event IS NULL AND NOT "Event" in LABELS(any)
MATCH(any)
OPTIONAL MATCH (any)<-[:PARTIAL]-(e:Event)
RETURN any, e
, что дает мне график, который представляет сеть, которую я моделирую в 2030 году. Вот график перед любыми событиями (год = 2000) Вот график после первого события (год = 2031)
Я хотел бы задать дополнительные вопросыподграфа, возвращенного вышеупомянутым запросом, например, «Сколько режимов имеет платформа для доступа в данный год?».Я пытался адаптировать приведенный выше запрос:
MATCH (p:Platform),(e:Equipment),(m:Mode)
OPTIONAL MATCH (p)--(event:Event), (e)--(event), (m)--(event)
WHERE event.year < 2031
WITH p,e,m, event
WHERE event IS NULL
MATCH(p),(e),(m)
RETURN p, e, m
Но это не приближает меня к тому месту, где я хочу, потому что он возвращает все.
Предполагается, что я не пытаюсь сделать что-то, чтопо сути сумасшедший (я изо всех сил пытаюсь найти хорошие ресурсы, чтобы научиться делать подобные запросы), как я могу согнуть шифр, чтобы получить информацию.Я прошу прощения за ясность - я не настолько знаком с доменом, чтобы использовать правильные термины для того, что я пытаюсь сделать.Самое близкое описание, которое я нашел, это «Извлечение подграфов, где ни один узел в этом подграфе не связан с узлом определенного типа с определенными атрибутами»
Любая помощь приветствуется!
Редактировать : После некоторой игры я придумал (я подозреваю, действительно неэффективный способ) вернуть все оборудование, у которого нет событий, или есть события, которые происходят после определенного года:
MATCH (e:Equipment)--(ev:Event)
WHERE ev.year > {year}
RETURN e
UNION
MATCH (e:Equipment)
WHERE NOT (e)<--(:Event)
RETURN e
Я также нашел этот стековый пост, который мне помог, но я не уверен, сможет ли он получить меня полностью