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”, numberTouchedvariables返回为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()查询中获得的用户并保存它。