【问题标题】:Create unique array in MongoDB在 MongoDB 中创建唯一数组
【发布时间】:2017-07-02 09:33:45
【问题描述】:

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

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

【问题讨论】:

  • 我有一个邮政编码字段,我们可以在其中输入多个邮政编码,这意味着它是一个数组字段,我希望它应该是唯一的,就像我输入 303030 和 [303030,123456] 那么它不应该抛出错误,但如果我让它独一无二
  • 这将帮助我在stackoverflow上询问stackoverflow.com/help/how-to-ask

标签: arrays mongodb indexing mongoose


【解决方案1】:

关键字unique 表示整个集合中只有一个具有该值的文档。例如,如果一个文档的邮政编码为 1,则没有其他文档能够拥有它,我认为这不是您想要的效果。

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

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

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

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

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2021-12-17
    • 2020-09-13
    • 2016-08-09
    相关资源
    最近更新 更多