Mongoose save()方法不写入数据库

时间:2014-01-26 03:44:03

标签: node.js mongodb coffeescript mongoose

所以我在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属性为"已验证"并且numberTouched变量返回1,表示1文档已受保存影响。但是当我在我的数据库中检查用户文档时,它仍然是"待定"的默认值。

有什么想法吗?

P.S。我正在使用MongoLab的开发数据库。但我不认为问题在于他们,因为我可以更新其他属性。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:-1)

在你要放的行

for account in user['accounts']

您正在创建一个独立于User模型实例的新变量。您可以使用该变量来显示数据(例如通过REST API),但不能用于修改User模型实例。又名。您正在修改另一个变量。

相反,尝试修改您从findOne()查询中获得的用户并保存它。