在MongoDB中创建唯一的数组

时间:2017-02-14 07:34:39

标签: arrays mongodb indexing mongoose

我有一个zipcode字段,我们可以输入多个zipcode。这是一个数组字段,我希望它应该是唯一的。

Mongoose架构 -

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

1 个答案:

答案 0 :(得分:0)

关键字unique表示整个集合中只有一个具有此值的文档。例如,如果一个文件有一个邮政编码1,那么没有其他文件可以拥有它,我认为这不是你想要的效果。

您正在寻找的是$addToSet命令。

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

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

User.findByIdAndUpdate(id, { $addToSet : {accounts : accountId } } )

在我的示例中,它将按ID找到用户并在其上添加一个帐户。但如果它已有帐户,则不会复制该值。

希望它有用。