sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose - Det går inte att skapa mer än 4 fält med `findOrCreate`

Varför du har problemet:
Du använder inte findOrCreate metod väl. findOrCreate kan ta upp till fyra argument.
findOrCreate(conditions, doc, options, callback) :

  • conditions :Detta används för att ange urvalsfiltret för att hitta dokumentet.
  • doc [valfritt]:Om ett dokument som matchar urvalsfiltret (conditions ) hittades inte, detta doc slås samman med vad du har i conditions och sedan infogas i DB.
  • options [valfritt]:Från plugin-kodbasen kom jag på att du kan användaoptions.upsert (om inställt på true ) för att uppdatera dokumentet om det redan finns.
  • callback :Funktionen som körs efter att operationen är klar.

Det du gör fel är att tilldela { email: profile.emails[0].value } som det tredje argumentet där options förväntas, är det meningen att du ska inkludera det i doc dvs det andra argumentet.

Åtgärden
Prova detta:

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



  1. Eval MongoDB-fråga med NodeJS

  2. Hur får man längden på en markör från mongodb med python?

  3. mongoDB 2.2.1 - databas ogiltig

  4. Om annat om villkor i mongodb aggregering