MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose - Mit "findOrCreate" können nicht mehr als 4 Felder erstellt werden

Warum das Problem auftritt:
Sie verwenden findOrCreate nicht Methode gut. findOrCreate kann bis zu vier Argumente annehmen.
findOrCreate(conditions, doc, options, callback) :

  • conditions :Dies wird verwendet, um den Auswahlfilter anzugeben, um das Dokument zu finden.
  • doc [optional]:Wenn ein Dokument, das dem Auswahlfilter entspricht (conditions ) nicht gefunden wird, dieses doc wird mit dem zusammengeführt, was Sie in conditions haben und dann in die DB eingefügt.
  • options [optional]:Aus der Plugin-Codebasis habe ich herausgefunden, dass Sie options.upsert verwenden können (wenn auf true gesetzt ), um das Dokument zu aktualisieren, falls es bereits vorhanden ist.
  • callback :Die Funktion, die ausgeführt wird, nachdem die Operation abgeschlossen ist.

Was Sie falsch machen, ist passign { email: profile.emails[0].value } als drittes Argument, wobei options erwartet wird, sollten Sie es in das doc aufnehmen d.h. das zweite Argument.

Die Lösung
Versuchen Sie Folgendes:

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