MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoose - Não é possível criar mais de 4 campos usando `findOrCreate`


Por que você está tendo o problema:
Você não está usando o findOrCreate método bem. findOrCreate pode receber até quatro argumentos.
findOrCreate(conditions, doc, options, callback) :
  • conditions :é usado para especificar o filtro de seleção para localizar o documento.
  • doc [opcional]:Se um documento que corresponde ao filtro de seleção(conditions ) não for encontrado, este doc é mesclado com o que você tem em conditions e, em seguida, inserido no banco de dados.
  • options [opcional]:Da base de código do plugin, imaginei que você pode usar options.upsert (se definido como true ) para atualizar o documento se ele já existir.
  • callback :A função executada após a conclusão da operação.

O que você está fazendo de errado é passar { email: profile.emails[0].value } como o terceiro argumento onde options é esperado, você deve incluí-lo no doc ou seja, o segundo argumento.

A correção
Tente isto:
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);
        }
      );
    }
  )
);