Mongoose save()方法不写入数据库
所以我正在用mongoose更新用户子文档的一个属性,但它并没有保存到我的数据库中。
这是我的function:
@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
variables返回为1,表示1个文档受到保存的影响。 但是,当我检查我的数据库中的用户文件,它仍然是“待定”的默认值。
有什么想法吗?
PS我正在使用MongoLab开发数据库。 但是我不认为这个问题与他们有关,因为我可以更新其他属性。
假设你正在改变一个混合types的子文档,你需要调用user.markModified('accounts')
让Mongoose在保存之前知道发生了什么变化。
但是,如果这两个操作同时发生,则可能会丢失数据。 我build议你使用findAndModify
命令,与$elemMatch
和$set
操作符一起使用。
在你放的线
for account in user['accounts']
您正在创build一个独立于User模型实例的新variables。 您可以使用该variables显示数据(例如通过REST API),但不能修改用户模型实例。 又名。 您正在修改另一个variables。
相反,尝试修改从findOne()查询中获得的用户并保存它。