现在的数据结构是这样的
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) {
});
不知道在修改第三级嵌套文档时,$定位符改怎么使用。
大家讲道理2017-04-24 16:01:39
其实想复杂了,嵌套查询嵌套修改什么的,如果一层一层的去找节点,效率不怎么高的。
文档型数据库,说白了,不多嵌套都深,总是一串类json格式的字符串。
最快最直接的方式如下:
json
db.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.范式化与反范式化”这一节