mongoose:没有保存的对象数组

我正在尝试添加对象id到数组中(mongoose)(Node.js)。 这是我的代码:

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不被添加到数组中。 我错过了什么?

你忘了“新”选项。 .find**Update()方法在默认情况下将其closures,这与root方法.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'}); } ) 

因此,文档实际上是在数据库中更新的,但没有“新”,那么你得到的原始文件find,而不是修改后的。

另外,无论你从哪里学习,“安全”选项都被弃用了很长一段时间。 所有的写入关注设置默认为已确认,这是该设置应该代表什么。