Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb中可变嵌套文档的更改_Mongodb - Fatal编程技术网

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扩展方法,它会更改文档,而不需要将其传输到客户端应用程序。