【问题标题】:Mongoose Cant update nested objectMongoose 无法更新嵌套对象
【发布时间】:2016-02-15 04:22:26
【问题描述】:

这是我的 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);
    });
});

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案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);
        });
    

    【讨论】:

    • key不是静态的怎么办?
    • @bookotl 您可以按照我上面更新的答案中的说明创建更新文档。
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2021-11-11
    • 2021-01-25
    • 2018-12-20
    相关资源
    最近更新 更多