猫鼬-无法使用`findOrCreate`创建四个以上的字段

时间:2020-02-25 11:19:57

标签: node.js mongodb mongoose passport.js

我正在将MongoDB与Node.js,MongoDB一起使用,并且正在对passport.js进行身份验证。

这是我的用户架构:

const userSchema = new mongoose.Schema({
  email: String,
  password: String,
  googleId: String,
  facebookId: String,
  profilePic: String,
  fName: String,
  lName: String
});

还有我的Google策略:

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 },
        { profilePic: profile.photos[0].value },
        { email: profile.emails[0].value },

        function(err, user) {
          return cb(err, user);
        }
      );
    }
  )
);

console.log的搜索结果显示了我的个人资料,以及个人资料照片的网址和个人资料的电子邮件,但我看不到我的电子邮件ID。仅创建了4个字段:

  • _id
  • googleId
  • profilePic
  • _v

有人可以告诉我如何也保存电子邮件字段吗?

1 个答案:

答案 0 :(得分:0)

为什么遇到问题:
您没有很好地使用findOrCreate方法。 findOrCreate最多可以包含四个参数。
findOrCreate(conditions, doc, options, callback)

  • conditions:用于指定选择过滤器 查找文档。
  • doc [可选]:如果找不到与选择过滤器(conditions)相匹配的文档,则此doc与您在{{1}中拥有的内容合并},然后插入数据库。
  • conditions [可选]:从插件代码库中,我认为您可以使用 options(如果设置为options.upsert)更新文档(如果有) 已经存在。
  • true:该操作完成后执行的功能。

您做错的是将callback作为第三个自变量{ email: profile.emails[0].value },应该将其包含在options中,即第二个自变量。

修复
试试这个:

doc