MongoDB:确保只有一个文档可以将字段设置为 true
MongoDB: Ensure that only one document can have a field set to true
我有一个具有多种配置的 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);
}
});
}
});
但是,我面临的问题是,从理论上讲,此集合中的多个项目可以将active
的布尔值设置为 true
。
在MongoDB中,有什么方法可以防止这种情况吗?有没有办法确保集合中只有一个文档的标志设置为 true,而所有其他文档都将其设置为 false?
删除
false 的标志值后,您可以在 active
标志上添加唯一的稀疏索引。这将确保只有一个文档可以将 active
标志设置为 true(或 false)。
db.CylonConfigurations.createIndex( { "active": 1 }, { sparse: true,unique: true } )
或者,您可以创建一个新集合,仅存储当前活动配置的ObjectId
,例如在名为 ActiveConfigurationId
的字段中。在此模型中,您只需更新此字段即可更改活动配置。
我们可以使用 partialFilterExpression,我们可以在其中仅过滤活动状态文档并设置唯一 true,这将确保在任何给定时刻只有一个文档处于活动状态。这将有助于克服稀疏类型解决方案的限制。
.db。CylonConfigurations.createIndex({"status":1},{unique:true, partialFilterExpression: {status : "Active"}})
相关文章:
- 如何将Date字段设置为等于另一个Date+Int值,该值表示月份值
- Sencha触摸,字段设置为Change Listener
- 将字段设置为有条件地使用所需的字段验证器
- crm 2011 javascript将日期字段设置为null
- 如何在自定义指令中将字段设置为$dirty
- javascript函数将上传文件字段设置为deafult
- 根据角度中的另一个字段设置输入字段的默认值
- Yii2 输入字段设置禁用取决于其他字段
- JavaScript for HTML5 必填字段设置为在 Safari 中工作
- 在 podio 中将计算日期字段设置为 null(因此使用 javascript)
- MongoDB:确保只有一个文档可以将字段设置为 true
- HTML 输入字段设置范围
- 如何使用 eval() 为作为参数提供的字段设置值
- j查询如何将值从输入字段设置为其他元素数据属性
- 使用具有金钱掩码的字段设置动态最大值
- 将输入字段设置为包含 window.location.href
- 根据下拉选择将输入字段设置为必填字段
- 从输入字段设置变量
- 从html输入字段设置javascript变量
- 如何在angularjs 1.3中将表单中的特定字段设置为dirty