mongodb中可变嵌套文档的更改
让我们进行以下简化构造。例如一些类似于家谱的结构。为简单起见,保证所有名称都是唯一的:mongodb中可变嵌套文档的更改,mongodb,Mongodb,让我们进行以下简化构造。例如一些类似于家谱的结构。为简单起见,保证所有名称都是唯一的: { _id: "abc", name: "Alan", children: [ {name: "Sophia", children: []}, {name: "Bruno", children: [ {name: "Ivan", children: [ {name: "Maya", children: []} ]} ]} ] }
{
_id: "abc",
name: "Alan",
children: [
{name: "Sophia", children: []},
{name: "Bruno", children: [
{name: "Ivan", children: [
{name: "Maya", children: []}
]}
]}
]
}
当我需要将“Ivan”的名称更改为“Igor”时,我只知道顶部文档的id(_id=“abc”),而我不知道Ivan的嵌套程度,是否仍然可以在不将整个文档(在我的情况下是兆字节)加载到客户端应用程序的情况下进行更新,修改整个对象并将整个对象替换回mongoDb
谢谢您的建议。您可以使用
$
定位运算符此处我了解定位运算符,以便我可以将其用于列表(同一嵌套级别上的所有文档),但这里可以在children.0处搜索“元素”,在children.1.children.0.children.1.children.50.children.1处搜索“元素”。$operator可以处理吗?然后你可以使用ArrayFilter,但即使这样,你也必须知道ArrayFilter的嵌套级别。我认为,这表明你应该重新考虑你的文档结构。我建议你像这样组织它们,哇,不知怎的,我错过了$graphLookup。实际上,我现在有一个非常相似的,规范化的结构。没有嵌套任何内容,所有内容都由父\u id和slug引用。而且效果很好。但是这个解决方案需要大规模扩展,因为读写的内容要多得多,而且需要切分,所以我决定使用嵌入式文档(现在还不确定)。我认为在某种意义上会有一些变通办法,我会在db服务器上使用一些mongo扩展方法,它会更改文档,而不需要将其传输到客户端应用程序。