所以我用 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/