Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬不能更新嵌套对象_Node.js_Mongodb_Mongoose - Fatal编程技术网

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您可以创建更新文档,如上面我更新的答案所示。