所以我用 Mongoose 更新了用户子文档的属性,但是没有保存到我的数据库中。

这是我的功能:

@User.findOne({'email': email}, (err, user) ->
    if err?
        callback(err)
    else if user?
        for account in user['accounts']
            if account['account_uuid'] is account_uuid

                account.state = "Verified"

                user.save((err, updated_user, numberTouched) ->
                    if err?
                        console.log err
                        return callback(err)
                    else
                        console.log 'Successfully verified account'
                        console.log updated_user

                        return callback(null, 'Successfully verified account')
                )
                return
        callback(new Error('No account for account_uuid'))
)

真正令人沮丧的是,updated_user的返回结果是account.state属性为“Verified”,而numberTouched变量的返回结果为1,这意味着1个文档已受到保存的影响。但是,当我在数据库中检查用户文档时,它仍然是“Pending”的默认值。

有什么想法吗?

P.S.我在MongoLab上使用开发数据库。但是我不认为问题出在他们身上,因为我可以很好地更新其他属性。

最佳答案

假设您要更改混合类型的子文档,则需要在保存之前调用user.markModified('accounts')让Mongoose知道更改了什么。

但是,如果其中两个操作同时发生,则可能会丢失数据。我建议您将findAndModify命令与$elemMatch$set运算符结合使用。

关于node.js - Mongoose save()方法未写入数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21359393/

10-10 21:43
查看更多