如何根据字段和字段的特定值创建 mongo 唯一索引?
How to create a mongo unique index based on fields and a particular value of a field?
我有一个预订集合,我在其中存储这样的数据:
{
_id,
fieldId: (a reference to _id from another collection),
status: a string which can be `valid` or `cancelled` or `completed`,
date: eg. `2022-02-09T13:00:00.000+00:00`
}
现在,我想确保在给定日期只能有一个状态为 fieldId 的预订:有效。可以有多个或none个已取消或已完成的,但fieldId、date和status的值valid
的组合必须是唯一的。我知道如何为 fieldId 和日期创建唯一索引:
BookingSchema.index({ fieldId: 1, date: 1 }, { unique: true });
是否也可以添加状态字段的值valid
?如果没有,我是否应该只检查每个预订是否已经存在该日期和字段的 valid
预订?
感谢prasad_提供解决方案,即部分索引。
如果有人遇到相同类型的问题,这里是猫鼬的解决方案:
BookingSchema.index(
{ fieldId: 1, date: 1 },
{
unique: true,
partialFilterExpression: {
status: { $eq: `valid` },
},
}
);
我有一个预订集合,我在其中存储这样的数据:
{
_id,
fieldId: (a reference to _id from another collection),
status: a string which can be `valid` or `cancelled` or `completed`,
date: eg. `2022-02-09T13:00:00.000+00:00`
}
现在,我想确保在给定日期只能有一个状态为 fieldId 的预订:有效。可以有多个或none个已取消或已完成的,但fieldId、date和status的值valid
的组合必须是唯一的。我知道如何为 fieldId 和日期创建唯一索引:
BookingSchema.index({ fieldId: 1, date: 1 }, { unique: true });
是否也可以添加状态字段的值valid
?如果没有,我是否应该只检查每个预订是否已经存在该日期和字段的 valid
预订?
感谢prasad_提供解决方案,即部分索引。 如果有人遇到相同类型的问题,这里是猫鼬的解决方案:
BookingSchema.index(
{ fieldId: 1, date: 1 },
{
unique: true,
partialFilterExpression: {
status: { $eq: `valid` },
},
}
);