cor*_*vid 6 javascript mongodb meteor
我有一个具有多种配置的 mongo 集合。然而,在任何时候,只有其中之一可以是“活动的”。我通过将active
标签设置为 true 来做到这一点。
CylonConfigurations = new Mongo.Collection('cylon_configurations');
Meteor.startup(function () {
if (Meteor.isServer) {
CylonConfigurations.upsert({
host: '192.168.1.4',
port: 23
}, {
$setOnInsert: {
host: '192.168.1.4',
port: 23,
active: true
}
}, function (err, s) {
if (!err) {
const conn = CylonConfigurations.findOne({ active: true });
Cylon.connect(conn.port, conn.host);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
然而,我面临的问题是,理论上,该集合中的多个项目可以将布尔值设置active
为true
。
在MongoDB中,有什么办法可以防止这种情况发生吗?有什么方法可以确保集合中只有一个文档的标志设置为 true,而所有其他文档都将其设置为 false?
active
删除错误的标志值后,您可以在标志上添加唯一的稀疏索引。这将确保只有一个文档可以将active
标志设置为 true(或 false)。
db.CylonConfigurations.createIndex( { "active": 1 }, { sparse: true,unique: true } )
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建一个新集合,仅存储ObjectId
当前活动配置的,例如在名为 的字段中ActiveConfigurationId
。在此模型中,您只需更新此字段即可更改活动配置。