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

Mongoose - Kan ikke oprette mere end 4 felter ved at bruge `findOrCreate`

Hvorfor du har problemet:
Du bruger ikke findOrCreate metode godt. findOrCreate kan tage op til fire argumenter.
findOrCreate(conditions, doc, options, callback) :

  • conditions :Dette bruges til at angive udvalgsfilteret for at finde dokumentet.
  • doc [valgfrit]:Hvis et dokument, der matcher selektionsfilteret (conditions ) er ikke fundet, dette doc er slået sammen med det, du har i conditions og derefter indsat i DB.
  • options [valgfrit]:Fra plugin-kodebasen regnede jeg med, at du kan brugeoptions.upsert (hvis indstillet til true ) for at opdatere dokumentet, hvis det allerede eksisterer.
  • callback :Funktionen udført efter handlingen er udført.

Det du gør forkert er at tildele { email: profile.emails[0].value } som det tredje argument hvor options forventes, skal du inkludere det i doc altså det andet argument.

Løsningen
Prøv dette:

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. Hvorfor kræver et mongodb replikasæt et ulige antal afstemningsknuder?

  2. Sådan gendannes en specifik samling i MongoDB ved hjælp af logisk sikkerhedskopiering

  3. Fjern et objekt fra et indlejret array med $pull og $[identifier] (mongoDB 3.6)

  4. MongoDB indlejret objektfeltdybdegrænse