嵌套文档修改 - mongodb第三级嵌套数组修改问题

浏览:27日期:2023-07-09

问题描述

现在的数据结构是这样的

course:{ name:String, chapter: [{ name: String, knowledge: [{ name: String,exam: [{ name: String, }] }]}]}

要想修改knowledge.name,修改语句该怎么写?之前在修改chapter.name时我是这样写的

Course.update({'chapter._id': req.body.id }, {$set: { 'chapter.$.name': name, //名称} }) .exec(function(err, num) { });

不知道在修改第三级嵌套文档时,$定位符改怎么使用。

问题解答

回答1:

其实想复杂了,嵌套查询嵌套修改什么的,如果一层一层的去找节点,效率不怎么高的。文档型数据库,说白了,不多嵌套都深,总是一串类json格式的字符串。最快最直接的方式如下:

jsondb.term.update({'_id' : ObjectId('54c1a899eb21ac9c995d3eb2')}, {$set:{ '_id' : ObjectId('54c1a899eb21ac9c995d3eb2'), 'course' : {'name' : 'String','chapter' : [ {'name' : 'String','knowledge' : [ {'name' : '原来如此','exam' : [ {'name' : 'String' }] }] }] }}})

你程序保证不变就好。先find出结果,只修改knowledge的name,然后再update。对数据库任何操作觉得很别扭很麻烦很低效的时候,就应该回过头想想数据库的结构设计是不是可以改进,这一点对于关系型数据库或非关系型数据库都适用。http://www.cnblogs.com/mokafamily/p/4102829.html,可以看看这篇文章中的“1.范式化与反范式化”这一节

相关文章: