$push 到带有 mongoose 的 MongoDB 中的数组不起作用

Posted

技术标签:

【中文标题】$push 到带有 mongoose 的 MongoDB 中的数组不起作用【英文标题】:$push to an array in MongoDB with mongoose doesn't work 【发布时间】: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 的更新来将更多值添加到数组中。因此,您可能需要像更新脚本一样首先更改数据。看看这个答案是否有帮助。 ***.com/questions/7401394/… 【参考方案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 ;

【讨论】:

以上是关于$push 到带有 mongoose 的 MongoDB 中的数组不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在客户端代码中重用 Mongoose 模式

为啥使用 MongoDB 的 $push 将新对象添加到数组时添加了带有 ObjectID 的 _id?

如果字段设置为 null,则恢复为 mongoose 中的默认值

Mongoose - findOneAndUpdate 动态 $push 到数组中

Node.js - Mongodb - Mongoose / 无法将数组字符串传递到 $push feild

如何使用已存在的Mongo连接配置Mongoose