首先通过条件然后更新结果。你不能像你所做的那样通过两个单独的条件。试试下面:
c.test.users.find_one_and_update(
{'uid': u'52ae5c7a48bd9ffb716bf4f774954d20'}},
{'$set': {'user_id': '111', 'device_id': 'abc'}}, {new: true}, function(err, user){
if(err) return next(err);
if(user.device_id !== 'c09b46863f953bec1d5c0a1a'){
user.device_id = 'abc';
user.save();
}
})
更新:
db.example.find_one_and_update(
{'uid': u'52ae5c7a48bd9ffb716bf4f774954d20'}},
{'$set': {'user_id': '111', 'device_id': 'abc'}},
return_document=ReturnDocument.AFTER)
获得此结果后,您可以更改返回的对象,然后保存它。
PS:由于 save() 在 3.0 中已弃用,因此如果您使用 >3.0 版本,请使用 replace_one();
< 3.0
var newUser = db.example.find_one_and_update(
{'uid': u'52ae5c7a48bd9ffb716bf4f774954d20'}},
{'$set': {'user_id': '111', 'device_id': 'abc'}},
return_document=ReturnDocument.AFTER);
if(newUser.device_id !== 'c09b46863f953bec1d5c0a1a'){
newUser.device_id = 'abc';
db.example.save(newUser);
}
>=3.0
var newUser = db.example.find_one_and_update(
{'uid': u'52ae5c7a48bd9ffb716bf4f774954d20'},
{'$set': {'user_id': '111', 'device_id': 'abc'}},
return_document=ReturnDocument.AFTER);
if(newUser.device_id !== 'c09b46863f953bec1d5c0a1a'){
db.example.replace_one({'uid': u'52ae5c7a48bd9ffb716bf4f774954d20'}, {'device_id': 'abc'})
}