database - Neo4j 中的 Cypher 查询以查找具有大多数路径匹配模式的特定节点
问题描述
我有一个 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 *
我遇到的问题以粉红色圆圈为例。我只想要查询中的一个粉红色圆圈(这是一个带有标签变量的节点),特别是我想要如下的变量
MATCH (v:Variable)<-[:MAPS_TO]-()<-[:HAS_DIMENSION]-(o:Observation)
通过这一点,我想强制它观察一个模式,在该模式中,它识别出与上述模式匹配的单个变量,用于最多数量的中间节点。因此,“新鲜地表水提取”变量将匹配此模式,因为它有两个匹配此模式的路径。但是“抽取的新鲜地下水”不会,因为它只有一个。我怎么能做到这一点?
解决方案
听起来您想返回通向它的路径数量最多的变量节点。这样的事情会大致返回您所追求的结果吗?您将需要根据匹配的语句进行调整。
MATCH p=(o:Observation {uq_id:'<your_id>'})-[:HAS_DIMENSION]->()<-[:MAPS_TO]-(v:Variable)
RETURN v.name, COUNT(p) as p ORDER BY p DESC LIMIT 1
推荐阅读
- r - 将值更新为没有 input$ 逻辑的 input$value
- escaping - 如何在 Presto 中转义分号
- c# - 如何在 Visual Studio 代码中创建和部署函数应用程序?
- python - python崩溃时如何继续运行pytest?
- kentico - 具有多种类型的 Kentico DocumentHelper.GetDocuments 不返回最新版本
- javascript - 通过 id 从对象中获取数据
- sql - 如何根据条件从选择查询中选择想要的列
- ios - 直接在应用程序中显示下载文件的预览
- ruby-on-rails - 在控制台中:正方形中的问号是什么意思,如何检测?
- linux - 带有 Docker 的 Debian 上的 LibreOffice Online