繁体   English   中英

猫鼬:过滤器然后更新文档(如果存在),否则创建它

[英]Mongoose : filter then update document if it exists , otherwise create it

在以下方法中,我试图使用我提供的电子邮件地址来搜索文档。 如果文档存在,我想更新_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 throw er; //未处理的“错误”事件^ BulkWriteError:E11000重复键错误索引:databasename.users。$ id dup键

谢谢您的帮助 !

您可以尝试使用upsert : true 如果找不到,这将创建文档

  User.findOneAndUpdate(query, update, options, function(error, result) {
   if (error) return;

    // do something with the document
  });

ps。 您不需要做newUser.save(..) 如果找不到,那将为您完成。 但是我不知道您为什么要尝试更新id因为这会导致致命的后果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM