MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose - Impossibile creare più di 4 campi usando `findOrCreate`

Perché stai riscontrando il problema:
Non stai utilizzando findOrCreate metodo bene. findOrCreate può richiedere fino a quattro argomenti.
findOrCreate(conditions, doc, options, callback) :

  • conditions :Viene utilizzato per specificare il filtro di selezione per trovare il documento.
  • doc [opzionale]:se un documento che corrisponde al filtro di selezione(conditions ) non è stato trovato, questo doc è unito a ciò che hai in conditions e quindi inserito nel DB.
  • options [opzionale]:dalla base di codice del plugin, ho pensato che puoi usare options.upsert (se impostato su true ) per aggiornare il documento se già esiste.
  • callback :La funzione eseguita al termine dell'operazione.

Quello che stai sbagliando è passign { email: profile.emails[0].value } come terzo argomento dove options è previsto, dovresti includerlo nel doc cioè il secondo argomento.

La correzione
Prova questo:

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