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

 张伊韵育财育信 发布于 2022-10-29 21:07

现在的数据结构是这样的

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.范式化与反范式化”这一节

    2022-11-12 01:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有