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]
}