使用mongoose的mongodb:带有嵌套集合的.save上的E11000重复键错误

时间:2017-11-04 13:23:50

标签: node.js mongodb mongoose

我正在尝试创建一个Project条目,它有一个我想描述为

的语言数组

语言最初可能是空的[],其中的每个对象都必须有一个名为key的字段,该字段必须是唯一的。

e.g:

{
  languages: [],
  ....
}

或:

{
  languages: [ { key: 'en-US } ],
  ...
}

mongoose Schema看起来像:

{
  languages: [{
    key: {
      type: String,
      unique: true,
    },
  }],
  ...
}

第一个创作有效:

const project = new Project({
  name,
  owner: user,
});

await project.save();

然而,此后我得到关于已经使用key:null的语言的错误,即使languages数组为空...

{ MongoError: E11000 duplicate key error collection: yebu.projects index: tags.name_1 dup key: { : null }
    at Function.MongoError.create (<redacted>/node_modules/mongodb-core/lib/error.js:31:11)
...

我在关键字段尝试了sparse: true,但无济于事。

2 个答案:

答案 0 :(得分:0)

正如这个回答提到:Mongodb unique sparse index

答案是将unique: truesparse: true合并。我没有注意到它正在工作,因为我在架构中的下一个集合失败了,直到我在那里添加它。

答案 1 :(得分:0)

尝试一下-将unique: truesparse: truedefault: null组合

{
  languages: [{
    key: {
      type: String,
      default: null
      unique: true,
    },
  }],
  ...
}