不能用mongoose将项目推送到数组中

use*_*718 2 javascript mongoose mongodb node.js

我正在尝试使用POST请求将项添加到用户对象中的集合中.

  User.findOneAndUpdate(
    {"_id": req.body.userid}, 
    {$push: {'shopping_list': req.body.itemid}},
    {safe: true, upsert: true},
    function(err, Model){
      console.log(err, Model);
      if(err){
        handleError(res, err);
      }
      return res.status(201).json(Model);
    }
  );
Run Code Online (Sandbox Code Playgroud)

我一直收到以下错误:

{"name":"MongoError","message":"exception:'$ push'为空.您必须指定如下字段:{$ push:{:...}}","value":{" _id ":" 5546cc0483b0186428e252cc", "电子邮件": "lilly@test.com", "passwordHash": "Q + VpK9L + I/DhAm7w01AArMacBkXEdyHp3zGF6JyJVzDhwgHpws4z8IBxycI7xrRX6Do2AEe/BvI37HauvAc6WA ==", "盐": "0Bi6XW0YuxutizQY3PZH4Q ==", "预算" :5000,"shopping_list":[],"橱柜":[],"饭":[],"__ v":0},"errmsg":"例外:'$ push'为空.你必须指定一个字段像这样:{$ push:{:...}}","code":9,"ok":0}

我不明白为什么会发生这种情况,因为字段'shopping_list'清晰可见并且值传递...

谁知道我做错了什么?

Joh*_*yHK 12

默认情况下,Mongoose不会更新未出现在模型架构中的字段.

因此,要么添加shopping_list到您的架构,要么在架构上设置strict选项false.