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

时间:2016-04-04 12:30:28

标签: node.js mongodb mongoose database-schema

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

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

谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我建议:

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

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

答案 2 :(得分:0)

您的架构将是这样的:

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
});