У меня есть база данных neo4j со статистической информацией о воде и отходах. В этой базе данных находятся точки данных, связанные с соответствующими фактами, включая сопоставления с внутренними определениями. Здесь на прикрепленном скриншоте приведен пример точки данных и связанных метаданных. Узел в центре - это значение, а непосредственные узлы, связанные с помощью «HAS_DIMENSION», - это измерения, поставляемые с поставщиком данных. Они не являются фиксированными и меняются в зависимости от поставщика. Каждое интересующее измерение сопоставляется с внутренним определением. В настоящее время это мой запрос:
MATCH (o:Observation {uq_id:'e__ABS_AGR_AQ__FSW__MIO_M3__BG__1970____9f07c7a629625e5ae00e35838fcd4f824a3593dd'})-[:HAS_DIMENSION]->()
MATCH (o)-[:HAS_DIMENSION]->()-[:HAS_SYNONYM_FROM]->()-[:WITH_TARGET_DEF]->(v:Variable)<-[:HAS_UNIT]-(u:Unit)
MATCH (o)-[vl0:HAS_DIMENSION]->()-[:HAS_SYNONYM_FROM]->()-[:WITH_TARGET_DEF]->(l:Location)
MATCH (o)-[vc0:HAS_DIMENSION]->()-[:HAS_SYNONYM_FROM]->()-[:WITH_TARGET_DEF]->(c:Country)
MATCH (o)-[vy0:HAS_DIMENSION]->()-[:HAS_SYNONYM_FROM]->()-[:WITH_TARGET_DEF]->(y:Year)
MATCH (o)-[:HAS_DIMENSION]->(unk0)
MATCH (o)-[sr0:CAME_FROM_FILE]->(ds0)-[sr1:BELONGS_TO]->(s0)
OPTIONAL MATCH (o)-[dtr0:HAS_DIMENSION]->()-[:HAS_SYNONYM_FROM]->()-[:WITH_TARGET_DEF]->(d:DataType)
RETURN *
Проблема, которую я имею, иллюстрируется розовыми кружками. Мне нужен только один розовый круг (который является узлом с меткой Variable) в запросе, в частности, я хочу, чтобы переменная была следующей
MATCH (v:Variable)<-[:MAPS_TO]-()<-[:HAS_DIMENSION]-(o:Observation)
Этим я хочу заставить его наблюдать шаблон, в котором он идентифицируетединственная переменная, которая соответствует шаблону выше для большинства промежуточных узлов. Таким образом, переменная «Абстрагированная пресная вода» будет соответствовать этому шаблону, поскольку она имеет два пути, которые соответствуют этому. Но «Пресная подземная вода забирается» не будет, так как она есть только одна. Как я мог сделать это?