新的mongoose布尔属性,每个人都是true,默认是false

我有一个UserModel,用于生产。 我想添加一个布尔属性(isRegistered)。 对于已经在我的平台上的用户,我希望这个新属性是真实的。 对于新用户,我希望它默认为false。

我怎么能把default: false的我的mongoose模型,但对这里已经有人呢?

谢谢 !

您需要等到您部署新的应用程序。 然后, 部署之后,您将isRegistered字段设置为true,您可以运行该命令来更新所有没有设置该字段的文档。

 db.collection.update({ isRegistered: { $exists: false } }, { isRegistered: true }, { multi: true }) 

我会build议:

  • 1)在你的Mongoose模型中添加一个default: false到你的isRegistred属性
  • 2)在特定的date和时间之前,运行查询以更新isRegisteredtrue的每个在您的平台上注册的人员(例如,将您的更新模型部署到生产中的那一刻)

这样,所有的旧用户将被标记为已经注册,而未​​来的用户则不会。 我假设你或MongoDB正在跟踪注册人的date。

你的模式是这样的:

 var UserSchema = new Schema({ name: String, isRegistered: { type: boolean, default: false } }); 

由于这个原因,默认情况下,所有的用户都有isRegistered字段为false

而已经插入到你的User集合的文件将不会有字段isRegistered 。 因此,您可以更新collections中的所有文档以包含该字段。

因此,您可以执行以下操作将isRegistered字段添加到User集合中的所有文档。 像这样的东西:

 var conditions = {}, update = { isRegistered: true }, options = { multi: true }; UserSchema.update(conditions, update, options, callback); function callback (err, numAffected) { // numAffected is the number of updated documents });