所以我在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的开发数据库。但我不认为问题在于他们,因为我可以更新其他属性。
答案 0 :(得分:3)
假设您要更改混合类型子文档,则需要调用user.markModified('accounts')
让Mongoose知道在保存之前已经更改了什么。
但是,如果其中两个操作同时发生,则可能会丢失数据。我建议您将findAndModify
命令与$elemMatch
和$set
运算符结合使用。
答案 1 :(得分:-1)
在你要放的行
for account in user['accounts']
您正在创建一个独立于User模型实例的新变量。您可以使用该变量来显示数据(例如通过REST API),但不能用于修改User模型实例。又名。您正在修改另一个变量。
相反,尝试修改您从findOne()查询中获得的用户并保存它。