$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 中的数组不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 MongoDB 的 $push 将新对象添加到数组时添加了带有 ObjectID 的 _id?
如果字段设置为 null,则恢复为 mongoose 中的默认值
Mongoose - findOneAndUpdate 动态 $push 到数组中