neo4j-cypher-guide by tomasonjo/blogs
npx skills add https://github.com/tomasonjo/blogs --skill neo4j-cypher-guide此技能帮助使用现代语法模式生成 Neo4j Cypher 读取查询,并避免使用已弃用的功能。它专注于图遍历和数据检索的高效查询模式。
生成 Cypher 查询时,请立即避免以下已移除的功能:
id() 函数 → 使用 elementId()排序时始终过滤 NULL 值:
// 错误 - 可能包含空值
MATCH (n:Node)
RETURN n.name, n.value
ORDER BY n.value
// 正确 - 排序前过滤空值
MATCH (n:Node)
WHERE n.value IS NOT NULL
RETURN n.name, n.value
ORDER BY n.value
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
使用具有现代语法的标准 Cypher 模式:
MATCH (n:Label {property: value})
WHERE n.otherProperty IS :: STRING
RETURN n
考虑使用量化路径模式以获得更好的性能:
// 替代:MATCH (a)-[*1..5]->(b)
// 使用:MATCH (a)-[]-{1,5}(b)
// 带过滤:
MATCH (a)((n WHERE n.active)-[]->(m)){1,5}(b)
使用 COUNT{}、EXISTS{} 和 COLLECT{} 子查询:
MATCH (p:Person)
WHERE count{(p)-[:KNOWS]->()} > 5
RETURN p.name,
exists{(p)-[:MANAGES]->()} AS isManager
使用 CALL 子查询进行复杂的数据检索:
MATCH (d:Department)
CALL (d) {
MATCH (d)<-[:WORKS_IN]-(p:Person)
WHERE p.salary IS NOT NULL // 过滤空值
WITH p ORDER BY p.salary DESC
LIMIT 3
RETURN collect(p.name) AS topEarners
}
RETURN d.name, topEarners
// 旧:RETURN size((n)-[]->())
// 现代:RETURN count{(n)-[]->()}
// 旧:WHERE exists((n)-[:REL]->())
// 现代:WHERE EXISTS {MATCH (n)-[:REL]->()}
// 同样有效:WHERE exists{(n)-[:REL]->()}
// 旧:WHERE id(n) = 123
// 现代:WHERE elementId(n) = "4:abc123:456"
// 注意:elementId 返回字符串,而非整数
// 始终添加空值检查
MATCH (n:Node)
WHERE n.sortProperty IS NOT NULL
RETURN n
ORDER BY n.sortProperty
// 或使用 NULLS LAST
MATCH (n:Node)
RETURN n
ORDER BY n.sortProperty NULLS LAST
在以下情况下加载相应的参考文件:
在最终确定任何生成的查询之前:
// 问题:RETURN n.prop, count(*) + n.other
// 解决方案:WITH n.prop AS prop, n.other AS other, count(*) AS cnt
// RETURN prop, cnt + other
// 使用 elementId(),但注意它返回字符串,而非整数
// 问题:MATCH (a)-[r*]->(), (b)-[r*]->()
// 解决方案:MATCH (a)-[r1*]->(), (b)-[r2*]->()
WHERE n:Label1|Label2 // 或
WHERE n:Label1&Label2 // 与
WHERE n:!Archived // 非
WHERE n.prop IS :: STRING
WHERE n.value IS :: INTEGER NOT NULL
WHERE n.data IS :: LIST<STRING>
为了获得更好的性能和可维护性,应始终优先使用现代语法模式。
每周安装量
107
代码仓库
GitHub 星标数
1.6K
首次出现
2026年1月25日
安全审计
安装于
opencode94
codex91
gemini-cli89
github-copilot83
claude-code76
kimi-cli74
This skill helps generate Neo4j Cypher read queries using modern syntax patterns and avoiding deprecated features. It focuses on efficient query patterns for graph traversal and data retrieval.
When generating Cypher queries, immediately avoid these REMOVED features:
id() function → Use elementId()ALWAYS filter NULL values when sorting:
// WRONG - May include null values
MATCH (n:Node)
RETURN n.name, n.value
ORDER BY n.value
// CORRECT - Filter nulls before sorting
MATCH (n:Node)
WHERE n.value IS NOT NULL
RETURN n.name, n.value
ORDER BY n.value
Use standard Cypher patterns with modern syntax:
MATCH (n:Label {property: value})
WHERE n.otherProperty IS :: STRING
RETURN n
Consider Quantified Path Patterns (QPP) for better performance:
// Instead of: MATCH (a)-[*1..5]->(b)
// Use: MATCH (a)-[]-{1,5}(b)
// With filtering:
MATCH (a)((n WHERE n.active)-[]->(m)){1,5}(b)
Use COUNT{}, EXISTS{}, and COLLECT{} subqueries:
MATCH (p:Person)
WHERE count{(p)-[:KNOWS]->()} > 5
RETURN p.name,
exists{(p)-[:MANAGES]->()} AS isManager
Use CALL subqueries for sophisticated data retrieval:
MATCH (d:Department)
CALL (d) {
MATCH (d)<-[:WORKS_IN]-(p:Person)
WHERE p.salary IS NOT NULL // Filter nulls
WITH p ORDER BY p.salary DESC
LIMIT 3
RETURN collect(p.name) AS topEarners
}
RETURN d.name, topEarners
// Old: RETURN size((n)-[]->())
// Modern: RETURN count{(n)-[]->()}
// Old: WHERE exists((n)-[:REL]->())
// Modern: WHERE EXISTS {MATCH (n)-[:REL]->()}
// Also valid: WHERE exists{(n)-[:REL]->()}
// Old: WHERE id(n) = 123
// Modern: WHERE elementId(n) = "4:abc123:456"
// Note: elementId returns a string, not integer
// Always add null check
MATCH (n:Node)
WHERE n.sortProperty IS NOT NULL
RETURN n
ORDER BY n.sortProperty
// Or use NULLS LAST
MATCH (n:Node)
RETURN n
ORDER BY n.sortProperty NULLS LAST
Load the appropriate reference file when:
Before finalizing any generated query:
// Problem: RETURN n.prop, count(*) + n.other
// Solution: WITH n.prop AS prop, n.other AS other, count(*) AS cnt
// RETURN prop, cnt + other
// Use elementId() but note it returns a string, not integer
// Problem: MATCH (a)-[r*]->(), (b)-[r*]->()
// Solution: MATCH (a)-[r1*]->(), (b)-[r2*]->()
WHERE n:Label1|Label2 // OR
WHERE n:Label1&Label2 // AND
WHERE n:!Archived // NOT
WHERE n.prop IS :: STRING
WHERE n.value IS :: INTEGER NOT NULL
WHERE n.data IS :: LIST<STRING>
Always prefer modern syntax patterns for better performance and maintainability.
Weekly Installs
107
Repository
GitHub Stars
1.6K
First Seen
Jan 25, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode94
codex91
gemini-cli89
github-copilot83
claude-code76
kimi-cli74
Excel财务建模规范与xlsx文件处理指南:专业格式、零错误公式与数据分析
46,700 周安装