Node.js 猫鼬不能更新嵌套对象
这是我的猫鼬模式Node.js 猫鼬不能更新嵌套对象,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,这是我的猫鼬模式 book_schema = mongoose.Schema({ book_name: { "type": String }, pages: { "type": Object, "default": {} } }); 这是我的文件看起来像 { "book_name": "some book", "pages": { 1: {"lenght": 7, "text": "bla bla
book_schema = mongoose.Schema({
book_name: {
"type": String
},
pages: {
"type": Object,
"default": {}
}
});
这是我的文件看起来像
{ "book_name": "some book",
"pages": {
1: {"lenght": 7, "text": "bla bla"},
2: {"lenght": 11, "text": "bla bla bla"}
}
}
这是查找文档并更改值的代码
Book.findOne({book_name: "some book"}, function(err, book){
book.pages[1].lenght = 10; ##change 7 to 10
book.save(function(err){
console.log(err);
});
});
由于某种原因,上面的代码无法更改该值。我试着换另一个,效果很好 使用方法和运算符更改值。比如说
Book.update(
{book_name: "some book"},
{$set: { "pages.1.lenght": 10 }}
,function (err, result){
if (err) console.log(err);
console.log(result);
});
对于非静态键,使用创建属性来创建更新文档,例如
var key = 1,
updateObj = {};
updateObj["pages."+ key +".lenght"] = 10;
Book.update(
{book_name: "some book"},
{$set: updateObj}
,function (err, result){
if (err) console.log(err);
console.log(result);
});
如果密钥不是静态的,我该怎么办?@bookotl您可以创建更新文档,如上面我更新的答案所示。