MongoDB中对象数组中的多个对象数组
其他程序员。 使用这样的MongoDb模型是否被认为是一种不好的做法:MongoDB中对象数组中的多个对象数组,mongodb,nosql,Mongodb,Nosql,其他程序员。 使用这样的MongoDb模型是否被认为是一种不好的做法: { companyId: '', companyName: '', companyDivisions: [ { divisionId: '', divisionName: '', divisionDepartments: [ { departm
{
companyId: '',
companyName: '',
companyDivisions: [
{
divisionId: '',
divisionName: '',
divisionDepartments: [
{
departmentId: '',
departmentName: ''
},
...
]
},
...
],
},
...
因为现在更新某些部门变得越来越复杂
谢谢。总的来说,我不认为这是一种不好的做法。如果您的模型类似于此数据结构,那么利用文档数据库以这种方式存储数据是一个不错的选择。您可以自然地处理数据,并且很有可能直接映射到数据模型上 另一种选择是拥有三种不同的收藏:
- 公司李>
- 分部李>
- 部门
db.companies.findAndModify(
{
query: {
"companyId": "yourCompanyId"
},
update: {
$set : { "companyDivisions.$[element1].divisionDepartments.$[element2].divisioneName": "yourNewName" }
},
arrayFilters: [
{ "element1.divisionId": "yourDivisioneId" },
{ "element2.departmentId": "yourDepartementId" }
]
});
此更新使用了MongoDB v3.6引入的新的强大功能。$[]
语法允许根据db.collection.findAndModify()方法的arrayFilters
选项中表示的特定条件选择数组项
请注意,如果条件匹配多个数组项,则更新会影响所有这些项,因此也允许进行多个更新
此外,请注意,我只会在需要时应用这种优化,因为过早优化是万恶之源。(D.Knuth)。在我的旧模式中(该数据库实际上是一个.dbf文件,转换为.json并导入到mongodb中),部门ID
不是唯一的。因此,在每个部门中,都有一个部门的departmentId
等于1。因此,在我的例子中,我需要设置多个条件(例如,如果divisionId
等于528,则为departmentId
等于2的部门设置一个新名称,或者将该部门完全拉出来)。我想我需要做的是从前端(Vue.js应用程序)发送一份完整的公司文档,并在数据库中进行更新。我说的对吗?在文档数据库中,检索整个文档以更新其中的一部分是正常的做法。您最终将数据库用作数据存储桶,并且代码仍然非常面向域。因此,它甚至可能被认为是可取的。至于性能问题,您可以使用相对较小的文档、数据集和普通硬件每秒执行数百甚至数千次这样的更新。如果您遇到数据库/网络瓶颈,那么您必须坚持更细粒度的更新策略,避免来回传输整个文档。我刚刚在回答中添加了代码,以便对部门执行细粒度更新。