Mongoose Cant更新嵌套对象

时间:2016-02-14 17:54:38

标签: node.js mongodb mongoose

这是我的Mongoose架构。

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);
    });
});

以上代码由于某种原因无法更改该值。我试图改变另一个它工作得很好。

1 个答案:

答案 0 :(得分:-1)

update() 方法与 $set 运算符一起使用以更改值。例如

Book.update(
    {book_name: "some book"}, 
    {$set: { "pages.1.lenght": 10 }}
    ,function (err, result){
        if (err) console.log(err);
        console.log(result);
    });

对于非静态密钥,请使用bracket notation创建更新文档以创建属性,例如

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);
    });