在 MongoDB 中创建唯一数组

Mam*_*mta 1 arrays indexing mongoose mongodb

我有一个邮政编码字段,我们可以在其中输入多个邮政编码。它是一个数组字段,我希望它应该是唯一的。

猫鼬模式 -

const RegionalZones = new Schema({
    name :      { type : String, required : true },
    country :   { type : String, required : true },
    zipCodes :  { type : Array,  required : true},
    isBlocked:  { type: Boolean, default : false },
    serviceTax: { type: Number,  default:10},
    cancelFee:  {type: Number,   default: 7.50},
    contractorCancelFee: {type: Number,   default: 7.50},
    createdAt : {type : Date,    default : Date.now},
    updatedAt : {type : Date,    default : Date.now}
});

RegionalZones.index({ country: 1, zipCodes: 1,name:1 }, { unique: true });

module.exports = mongoose.model('RegionalZones', RegionalZones);
Run Code Online (Sandbox Code Playgroud)

Isr*_*inc 5

关键字unique意味着整个集合中只有一个具有此值的文档。例如,如果一个文档的邮政编码为 1,则其他文档都无法拥有它,我认为这不是您想要的效果。

你要找的是$addToSet命令。

我的建议是您从此字段中删除 unique 修饰符,而是在将数据插入此数组时使用该$addToSet命令。

这是我在过去的项目中使用的示例代码:

User.findByIdAndUpdate(id, { $addToSet : {accounts : accountId } } )
Run Code Online (Sandbox Code Playgroud)

在我的示例中,它将通过 id 查找用户并在其上添加一个帐户。但是如果它已经有一个帐户,它就不会复制该值。

希望它有帮助。