巢狀文件修改 - mongodb第三層巢狀數組修改問題
怪我咯
怪我咯 2017-04-24 15:59:39
0
1
873

現在的資料結構是這樣的

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.範式化與反範式化」這一節

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板