如何修复重复键错误收集的朋友

时间:2019-03-10 14:44:49

标签: javascript mongodb mongoose duplicates mongoose-schema

我收到以下错误:

E11000 duplicate key error collection: db.users index: friends.userid_1 dup key: { : null }

我不知道该如何解决。默认情况下它什么都没有,但是当我在friends中输入不带任何内容的新用户ID时,我仍然会收到错误消息。为什么?

在用户模式中:

   friends : [
        {
            userid : {type: String, default: '', index: { unique: true }},
        }
    ],
    friendRequests: [
        {
            userid : {type: String, default: '', index: { unique: true }},
        }
    ]

1 个答案:

答案 0 :(得分:1)

根据猫鼬官方documentation

  

数组是特殊的,因为它们隐式具有默认值[](空数组)。

这就是为什么在null中不输入任何内容时它隐式索引friends值的原因。要解决此问题,您可以将两个数组的default值显式定义为undefined,并将索引创建为sparse,以从unique约束中排除空值,请尝试:

friends : {
    type: [ { userid : {type: String, default: '', index: { unique: true, sparse: true } } } ],
    default: undefined
},
friendRequests: {
    type: [ { userid : {type: String, default: '', index: { unique: true, sparse: true } } } ],
    default: undefined
}

编辑:在测试之前,请确保猫鼬会重建索引