MongoDB和分层内容:更新“;面包屑“;层次移动后
我的数据库中的文档是这样建模的:MongoDB和分层内容:更新“;面包屑“;层次移动后,mongodb,Mongodb,我的数据库中的文档是这样建模的: { "_id": ... "parentId": ... "content": "..." } 文档可以具有相同集合的父文档(可选,有“根”文档) 把它想象成一棵文档树 { "_id": 1 "parentId": undefined "content": "..." } { "_id": 2 "parentId": 1 "content": "..." } { "_id": 3 "parentId": 2 "content":
{
"_id": ...
"parentId": ...
"content": "..."
}
文档可以具有相同集合的父文档(可选,有“根”文档)
把它想象成一棵文档树
{
"_id": 1
"parentId": undefined
"content": "..."
}
{
"_id": 2
"parentId": 1
"content": "..."
}
{
"_id": 3
"parentId": 2
"content": "..."
}
然后我们有一个面包屑1>2>3的层次结构
出于查询目的,我们对文档中的breadcrumb进行了非规范化,因为它允许查询breadcrumb,比如说,获取2以下的所有文档(返回2+3)
在我们的系统中,面包屑的“反向”顺序是正确的。如果有帮助的话,我们可以把它改成“正常”的顺序,但我试着看看这是真的需要
现在让我们来介绍第四和第五份文件(其中:
假设我们要更改文档2的父级,并用parentId=5
替换parentId=1
我们如何进行查询以更新文档2下的所有文档的面包屑
我的意思是:
- 文件2用[2,5,4]代替[2,1]
- 文件3用[3,2,5,4]代替[3,2,1]
{“breadcrumb”:“2”}
但我不知道如何构建更新查询,因为我们应该用一个新数组替换面包屑数组的末尾
我原以为可以先拉一次,然后推一次,但似乎是同时拉一次。
我宁愿在一个查询中执行此操作
我有潜在的大型文档树,查询应该能够更新超过10k个文档的面包屑
{
"_id": 1
"parentId": undefined
"content": "..."
}
{
"_id": 2
"parentId": 1
"content": "..."
}
{
"_id": 3
"parentId": 2
"content": "..."
}
有什么想法吗
{
"_id": 4
"parentId": undefined
"content": "..."
"breadcrumb" : [4]
}
{
"_id": 5
"parentId": 4
"content": "..."
"breadcrumb" : [5,4]
}