sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose:no se pueden crear más de 4 campos usando `findOrCreate`

Por qué tiene el problema:
No está utilizando findOrCreate método bien. findOrCreate puede aceptar hasta cuatro argumentos.
findOrCreate(conditions, doc, options, callback) :

  • conditions :Esto se usa para especificar el filtro de selección para encontrar el documento.
  • doc [opcional]:si un documento coincide con el filtro de selección (conditions ) no se encuentra, este doc se fusiona con lo que tienes en conditions y luego insertado en la base de datos.
  • options [opcional]:desde el código base del complemento, pensé que puedes usar options.upsert (si se establece en true ) para actualizar el documento si ya existe.
  • callback :La función ejecutada después de que se realiza la operación.

Lo que estás haciendo mal es pasar { email: profile.emails[0].value } como tercer argumento donde options se espera, se supone que debe incluirlo en el doc es decir, el segundo argumento.

La solución
Prueba esto:

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);
        }
      );
    }
  )
);