【问题标题】:Update a undefined proprety on mongoose schema and save更新猫鼬模式中的未定义属性并保存
【发布时间】:2015-01-28 15:58:23
【问题描述】:

我已经定义了一个如下的用户模式

var UserSchema = new Schema({
  firstName: { type: String, required: true },
  lastName: { type: String, required: true },
  email: { type: String, required: true },
  location: String,
  picture: String,
  isFirstNamePublic: { type: Boolean, required: false, Default: false },
  isLastNamePublic: { type: Boolean, required: false, Default: false },
  isEmailPublic: { type: Boolean, required: false, Default: false },
  isLocationPublic: { type: Boolean, required: false, Default: false },
  isPicturePublic: { type: Boolean, required: false, Default: false },
  passwordHash: { type: String, required: true },
  userRoles: [{businessId: String, role: {type: String, uppercase: true, enum: ['INDIVIDUAL_USER', 'BUSINESS_EMPLOYEE', 'BUSINESS_ADMIN', 'CLIENT', 'PLATFORM_EMPLOYEE']}}],
  interestedOfferCategory: String,
  linkedSocialNetwork: {type: String, required: false, uppercase: true, enum: ['FACEBOOK', 'TWITTER', 'LINKEDIN']},
  linkedSocialNetworkUserId: String,
  resetPasswordToken: String,
  resetPasswordExpired: Boolean
});

现在,如果我想更新任何未定义的字段,我将无法更新。例如:我保存了一个用户文档,如下所示

{ _id: 54c439395ff4ede519912ea8,
  firstName: 'updated first name',
  lastName: 'test',
  email: 'test@test.com',
  interestedOfferCategory: 'testcategory',
  passwordHash: '$2a$10$S1zqmQHQ7Sd/qJjtryfzFua4Rn6Xi/oCHsJP9mLfyUnMg/gNV/u3K',
  __v: 0,
  userRoles: 
   [ { businessId: '123',
       role: 'INDIVIDUAL_USER',
       _id: 54c439395ff4ede519912ea9 } ] }

现在我扩展此文档以添加如下所示的 resetPasswordToken

var updatedUser = _.extend(user, {resetPasswordToken: token, revokeSessionTokenExpired: false});

如果我尝试保存文档,resetPasswordToken 和 resetPasswordTokenExpired 的值不会更新。

updatedUser.save(cb);

上面的行没有更新值。

我在这里错过了什么?

【问题讨论】:

  • revokeSessionTokenExpired != resetPasswordTokenExpired
  • @NeilLunn 我没听明白?
  • 您的代码使用了错误的属性名称,它显示为“revokeSessionTokenExpired”,文档中不存在该名称。
  • @NeilLunn 即使我将其更改为resetPasswordExpired,文档也不会更新

标签: node.js mongodb mongoose


【解决方案1】:

正在扩展的对象“用户”看起来是一个使用“新”关键字实例化的猫鼬模型对象。如果是这样,您必须调用 do var objUser = user.toObject() 并扩展 objUser。

  var mongooseUser = require('/path/mongooseUserSchemaFileName.js');

  var userDoc = { 
                    _id: 54c439395ff4ede519912ea8,
                    firstName: 'updated first name',
                    lastName: 'test',
                    email: 'test@test.com',
                    interestedOfferCategory: 'testcategory',
                    passwordHash: '$2a$10$S1zqmQHQ7Sd/qJjtryfzFua4Rn6Xi/oCHsJP9mLfyUnMg/gNV/u3K',
                    __v: 0,
                    userRoles: [ 
                          { businessId: '123',
                            role: 'INDIVIDUAL_USER',
                            _id: 54c439395ff4ede519912ea9 
                          } 
                               ] 
                    }

   var tempUser = _.extend(userDoc, {resetPasswordToken: token,     revokeSessionTokenExpired: false});

   var updateUser = new mongooseUser(tempUser);
   updatedUser.save(cb);

【讨论】:

  • 除非你从来没有在任何地方打电话给.toObject()。所以我认为你应该向 OP 展示他们必须这样做的确切位置。这也更像是一个“问题”而不是“答案”,而不是真正想要看到它是作为答案的。在有人将其误认为是您自己的“问题”并将其标记为删除之前,您应该更改措辞。
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 2015-04-10
  • 2017-11-01
相关资源
最近更新 更多