【问题标题】:$push to an array in MongoDB with mongoose doesn't work$push 到带有 mongoose 的 MongoDB 中的数组不起作用
【发布时间】:2017-09-03 01:56:16
【问题描述】:

errmsg: 'The field \'weight\' 必须是一个数组,但是是 int 类型的 文件

我的架构:

weight: [{
  type: Number
}]

还有我的发帖请求:

app.post('/edit', function(req, res){
    var update = {  $push: {"weight": req.body.weight}};
    User.findOneAndUpdate(conditions, update, options, function (err)
    {
      if (err)
      {
          console.log(err);
      }
      else
      {
          console.log('yep');
      }
    })
});

【问题讨论】:

  • 看起来您的字段类似于 db 中的 {"weight": 3},而您正在使用 $push 将数组值推送到 int 类型字段中。
  • 所以,我应该将架构更改为类似: weight: [{ type: Array }], ?它不起作用
  • 不,架构定义是正确的。我的意思是建议您首先修复weight 字段中的数据。它应该看起来像 db 中的 {"weight": [3]},您可以使用 $push 的更新来将更多值添加到数组中。因此,您可能需要像更新脚本一样首先更改数据。看看这个答案是否有帮助。 stackoverflow.com/questions/7401394/…

标签: arrays mongodb mongoose types push


【解决方案1】:

如果集合中有多个文档与您的conditions 匹配,您可以通过将{ weight: { $type: 4 } } 添加到您的conditions 来仅更新合适的一个。

否则您的应用程序架构与数据库中的数据不匹配。

【讨论】:

  • 我使用user_id作为条件,所以我只有一条记录
  • 然后它属于答案的“否则”部分。
【解决方案2】:

这可能有效。

//架构

weight: [Number]

http://mongoosejs.com/docs/schematypes.html

//如果将对象推入数组也可以这样

//架构

weight: [{
  weight: {
    type: Number
  }
}]

//然后在API中

var update = {  $push: {"weight": { "weight": req.body.weight }}};

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 2016-02-26
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2015-02-12
    • 2017-01-19
    相关资源
    最近更新 更多