Mongoose:未保存的对象数组

时间:2015-07-26 11:55:27

标签: node.js mongodb mongoose mongodb-query

我正在尝试在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不会添加到数组中。我错过了什么?

1 个答案:

答案 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"选项已被弃用了很长时间。所有写入关注设置默认为已确认,这是该设置应该表示的内容。