新的猫鼬布尔属性,每个人都为真,默认为假

New mongoose boolean attribute, everyone at true, default is false

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

如何将 default: false 放入我的猫鼬模型中,但对已经在这里的人来说是正确的?

谢谢!

我建议:

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

这样,您所有的老用户都将被标记为已注册,而未​​来的用户则不会。我假设您或 MongoDB 正在跟踪某人注册的日期。

你的模式应该是这样的:

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

因此,默认情况下,所有用户的 isRegistered 字段都将是 false

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

因此您可以执行以下操作,将 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
});

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

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