我正在尝试在mongoose(Node.js)中将对象id添加到数组中。这是我的代码:
app.post('/api/users/:userId/favorites/:objectId', function(req, res, next) {
User.findByIdAndUpdate(req.params.userId, {$addToSet: {user_favorites: req.params.objectId}}, {safe: true, upsert: true}, function(err, data){
if (err) return res.status(500).send(err)
res.status(200).send({'message':'saved'});
})
})
这是我的模特:
module.exports = mongoose.model('User',{
...
user_favorites: [{ type: mongoose.Types.ObjectId, ref: 'Property' }],
...
})
不会返回任何错误,但ID不会添加到数组中。我错过了什么?
答案 0 :(得分:1)
您忘记了"new"选项。 .find**Update()
方法默认关闭此方法,这与根方法.findAndModfiy()
的行为相同:
User.findByIdAndUpdate(
req.params.userId,
{ "$addToSet": {
"user_favorites": req.params.objectId
},
{ "upsert": true, "new": true },
function(err, data){
if (err) return res.status(500).send(err)
res.status(200).send({'message':'saved'});
}
)
因此,文档实际上是在数据库中更新,但没有" new"然后你得到原始文件,而不是修改后的文件。
此外,无论您从中学到什么教程," safe"选项已被弃用了很长时间。所有写入关注设置默认为已确认,这是该设置应该表示的内容。