在以下方法中,我正在尝试使用我提供的电子邮件地址搜索文档。如果文档存在,我想更新_id字段,否则我创建一个全新的文档。
function (accessToken, refreshToken, profile, done) {
var newUser = new User();
newUser.name = profile.displayName;
newUser.email = profile.emails[0].value.toString();
options = { upsert: true, new: true, setDefaultsOnInsert: true };
update = { '_id': newUser._id };
User.findOneAndUpdate({ 'email': profile.emails[0].value.toString() }, update, options, function (err, user) {
newUser.save(function (err) {
if (err)
throw err;
newUser.token = newUser.generateJwt();
});
});
return done(null, newUser);
}
我在控制台中收到以下错误:
events.js:183 扔掉//未处理的'错误'事件 ^ BulkWriteError:E11000重复键错误索引:databasename.users。$ id dup key
感谢您的帮助!
答案 0 :(得分:0)
您可以使用upsert : true
尝试此操作。如果找不到,将创建文档
User.findOneAndUpdate(query, update, options, function(error, result) {
if (error) return;
// do something with the document
});
PS。您无需执行newUser.save(..)
。如果没找到,那就会为你做到这一点。
但我不知道你为什么要更新id
,因为这会造成致命的后果