Node.js 新的mongoose布尔属性,everyone为true,默认为false

Node.js 新的mongoose布尔属性,everyone为true,默认为false,node.js,mongodb,mongoose,database-schema,Node.js,Mongodb,Mongoose,Database Schema,我有一个用户模型,用于生产。我想添加一个布尔属性(isRegistered)。对于已经在我的平台上的人,我希望这个新属性是真实的。对于新用户,我希望它默认为false 我怎样才能将default:false添加到我的猫鼬模型中,但对于已经在这里的人来说却是true 谢谢 我建议: 1) 将default:false添加到Mongoose模型中的isRegistred属性中 2) 为在特定日期和时间(例如,您将更新后的模型部署到生产中的那一刻)之前在您的平台上注册的每个人运行一个查询,将isRe

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

我怎样才能将
default:false
添加到我的猫鼬模型中,但对于已经在这里的人来说却是true

谢谢

我建议:

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

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

您的模式如下:

var UserSchema = new Schema({
    name: String,
    isRegistered: { type: boolean, default: false }
});
因此,默认情况下,所有用户的
isRegistered
字段都将
false

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

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

首先通过添加新属性更新mongodb中的集合,然后使用新模型更新应用程序;)谢谢$你在这里玩把戏。它将检查该值是否仅来自默认值或已设置。我添加了一个在搜索解决方案时发现的东西:如果设置默认值,所有创建的文档都将在MongoDb中具有该值,而不仅仅是通过Mongoose