你能帮我构建一下密码查询吗?我有以下图形数据库结构:
(parent:Category)-[:subcategory]->(child:Category)
Run Code Online (Sandbox Code Playgroud)
使用此图数据,我具有深层次的分层树.
我在Stackoverfllow.com上找到了以下代码并更改了我的数据:
MATCH (root:Category)-[:subcategory]->(parent:Category)-[:subcategory]->(child:Category)
WITH root, {category: parent, children: collect(child)} AS parent_with_children
WHERE NOT(()-[:subcategory]->(root))
RETURN {category: root, children: collect(parent_with_children)}
Run Code Online (Sandbox Code Playgroud)
但他只对3级树的深度构建响应.我需要更大.我试着像这个例子一样构建json响应:
[
category: {
name: "PC"
children: {
category: {
name: "Parts"
children: {
category: {
name: "CPU"
...
}
}
},
category: {
name: "Accessories"
...
}
}
},
category: {
name: "Laptop"
...
}
]
Run Code Online (Sandbox Code Playgroud)
Cypher可以进行递归调用吗?我认为这会更好.
谢谢.
PS我知道在SO上有类似的问题,但他们没有帮助我.
Cypher 当叶子处于任意深度时,不适合在树结构中倾倒图形数据.
但是,使用neo4j 3.x,如果能够在服务器上安装APOC插件并使用该apoc.convert.toTree过程,则可以接近所需的内容.
首先,让我们创建一些示例数据:
CREATE
(c1:Category {name: 'PC'}),
(c1)-[:subcategory]->(c2:Category {name: 'Parts'}),
(c2)-[:subcategory]->(c3:Category {name: 'CPU'}),
(c3)-[:subcategory]->(c4:Category {name: 'CacheRAM'}),
(c1)-[:subcategory]->(c5:Category {name: 'Accessories'}),
(c5)-[:subcategory]->(c6:Category {name: 'Mouse'}),
(c5)-[:subcategory]->(c7:Category {name: 'Keyboard'}),
(c10:Category {name: 'Laptop'}),
(c10)-[:subcategory]->(c20:Category {name: 'Parts'}),
(c20)-[:subcategory]->(c30:Category {name: 'CPU'}),
(c10)-[:subcategory]->(c40:Category {name: 'Accessories'}),
(c40)-[:subcategory]->(c50:Category {name: 'Stylus'});
Run Code Online (Sandbox Code Playgroud)
然后使用此查询:
MATCH p=(n:Category)-[:subcategory*]->(m)
WHERE NOT ()-[:subcategory]->(n)
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) yield value
RETURN value;
Run Code Online (Sandbox Code Playgroud)
...你将获得N个结果行,其中N是根节点的数量Category.以下是一个示例结果片段:
{
...
"row": [
{
"_id": 150,
"_type": "Category",
"name": "PC",
"subcategory": [
{
"_id": 154,
"_type": "Category",
"name": "Accessories",
"subcategory": [
{
"_id": 156,
"_type": "Category",
"name": "Keyboard"
},
{
"_id": 155,
"_type": "Category",
"name": "Mouse"
}
]
},
{
"_id": 151,
"_type": "Category",
"name": "Parts",
"subcategory": [
{
"_id": 152,
"_type": "Category",
"name": "CPU",
"subcategory": [
{
"_id": 153,
"_type": "Category",
"name": "CacheRAM"
}
]
}
]
}
]
}
],
...
"row": [
{
"_id": 157,
"_type": "Category",
"name": "Laptop",
"subcategory": [
{
"_id": 158,
"_type": "Category",
"name": "Parts",
"subcategory": [
{
"_id": 159,
"_type": "Category",
"name": "CPU"
}
]
},
{
"_id": 160,
"_type": "Category",
"name": "Accessories",
"subcategory": [
{
"_id": 161,
"_type": "Category",
"name": "Stylus"
}
]
}
]
}
],
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |