updateOne $ set not working - Mongoose

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了updateOne $ set not working - Mongoose相关的知识,希望对你有一定的参考价值。

我正在尝试更新数组中的子文档books但没有成功。新数据不会被保存。

表达:

router.put("/:id/:bookid", (req, res) => {
  Library.updateOne(
    { _id: req.params.id, "books._id": req.params.bookid },
    { $set: { "books.$.title": "New value" } }
  );
});

LibraryScema:

const LibarySchema = new Library({
  Name: {
    type: String,
    required: false
  }, 
  books: [BookSchema]
});

bookScema:

const BookSchema = new Schema({

  title: {
    type: String,
    required: false
  },
  Chapters: [
    {
      chapterTitle: {
        type: String,
        required: false
      }
    }
  ]
});

我究竟做错了什么?

编辑:

图书馆表:

       {
        "_id": {
            "$oid": "12345"
        },
        "Name": "A random libary",
        "Books": [       
            {
                "_id": {
                    "$oid": "1"
                }
                "title": "TitleExample",
                "Chapters": [
                    {
                      chapterTitle: "first chapter etc"
                    }]             
            },
            {
                "_id": {
                    "$oid": "2"
                }
                "title": "Another book"  ,
                "Chapters": [
                    {
                      chapterTitle: "first chapter etc"
                    }]  
             }
           ]
         }
答案
I updated my answer.

router.put("/:id/:bookid", (req, res) => {
      Library.findOne({ _id: req.params.id, "books._id": req.params.bookid }).exec(function(err,result){
    if(err)throw err;
    if(result){
    result.books.title="new value";
    result.save()
    console.log("new value")
    }
    else{console.log("not found")}
    })
    });

你可以尝试这个,可能会帮助你。

以上是关于updateOne $ set not working - Mongoose的主要内容,如果未能解决你的问题,请参考以下文章

在官方mongo-go-driver的UpdateOne中$ set的bson语法是什么

将edittext限制为单行

验证无法使用 ng-model-options = updateOn: 'submit'

MongoDB中updateOne超过findOneAndUpdate的用例[重复]

使用自动完成和“updateOn:'blur'”时防止早期验证

AngularJS Uncaught SyntaxError: Unexpected token :