neo4j - Neo4j 获取属性小于特定值的最大节点
问题描述
在我的 Neo4j 数据库中,有很多节点具有相同的 nodeID 和不同的级别,它们通过路径连接。每次我试图找到具有小于特定级别的最大级别的节点时n
。我使用以下 Cypher 查询,它从具有 nodeID 的最新节点开始搜索id
。
MATCH (:Node{NodeID:id,Current:'true'})-[:type*0..]->(m:Node{NodeID:id})
WHERE m.Level < n
RETURN m
ORDER BY m.Level DESC
LIMIT 1
我为这个数据库创建的索引如下:
CREATE INDEX Nodes FOR(n:Node) ON (n.NodeID, n.Level)
但是,它有点慢,特别是当路径很长并且我需要重复这个过程数千次时。所以我的问题是,有没有更好的实现方式,我需要修改我的索引来提高性能吗?在此先感谢您的帮助!
解决方案
假设所有相同的Node
sNodeID
都在以相同节点为type
根的路径中,那么以下查询在逻辑上应该是等效的,但速度更快:Current
NodeID
MATCH (m:Node)
WHERE m.NodeID = $id AND m.Level < $n
RETURN m
ORDER BY m.Level DESC
LIMIT 1
此查询假定id
并且n
是查询参数。
推荐阅读
- reactjs - 检查 Modal 是否在玩笑酶中使用条件道具渲染
- azure - 自定义容器中的 Azure Web App,环境变量未从应用服务传播到容器
- assembly - 如何使用 objdump 查找导致崩溃的指令
- r - R:努力使用正则表达式来更改向量中的对象
- javascript - 使用未使用的 CSV 数据列绘制的系列过多
- javascript - 如何在JS中弹出特定日期之前的数组值
- visual-c++ - Windows 上的 QtCreator:找不到 CMAKE_CXX_COMPILER
- python - 如何调用自定义包中的任何函数
- reactjs - 如何在不出现 Typescript 错误的情况下将 signUpConfig 传递给 Amplify 的 withAuthenticator HOC
- dart - 在单个列表中按条件组合多个项目