MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose - Impossible de créer plus de 4 champs à l'aide de `findOrCreate`

Pourquoi vous rencontrez le problème :
Vous n'utilisez pas le findOrCreate bien la méthode. findOrCreate peut prendre jusqu'à quatre arguments.
findOrCreate(conditions, doc, options, callback) :

  • conditions :Ceci est utilisé pour spécifier le filtre de sélection pour trouver le document.
  • doc [optionnel] :Si un document qui correspond au filtre de sélection(conditions ) est introuvable, ce doc est fusionné avec ce que vous avez dans conditions puis inséré dans la BD.
  • options [facultatif] :à partir de la base de code du plug-in, j'ai pensé que vous pouvez utiliser options.upsert (si défini sur true ) pour mettre à jour le document s'il existe déjà.
  • callback :La fonction exécutée une fois l'opération terminée.

Ce que vous faites de mal est de passer { email: profile.emails[0].value } comme troisième argument où options est attendu, vous êtes censé l'inclure dans le doc c'est-à-dire le deuxième argument.

La solution
Essayez ceci :

passport.use(
  new GoogleStrategy(
    {
      clientID: process.env.CLIENT_ID,
      clientSecret: process.env.CLIENT_SECRET,
      callbackURL: "http://localhost:3000/auth/google/dashboard",
      profileFields: ["id", "displayName", "photos", "email"]
    },
    function(accessToken, refreshToken, profile, cb) {
      console.log(profile);
      console.log(profile.photos[0].value);
      User.findOrCreate(
        { googleId: profile.id },
        // Notice that this function parameter below 
        // includes both the profilePic and email
        { profilePic: profile.photos[0].value, email: profile.emails[0].value },
        function(err, user) {
          return cb(err, user);
        }
      );
    }
  )
);