MongoDB:删除唯一约束

时间:2012-09-09 07:50:09

标签: node.js mongodb database-schema

我尝试使用带有Express和Mongoose的Node.js开发RESTful API"例子,我遇到了MongoDB架构的问题:

POST: 
{ title: 'My Awesome T-shirt 2',
  description: 'All about the details. Of course it\'s black.',
  style: '12345' }
{ [MongoError: E11000 duplicate key error index: ecomm_database.products.$style_1  dup key: { : "12345" }]
  name: 'MongoError',
  err: 'E11000 duplicate key error index: ecomm_database.products.$style_1  dup key: { : "12345" }',

架构定义中存在唯一的约束:

var Product = new Schema({  
    title: { type: String, required: true },  
    description: { type: String, required: true },  
    style: { type: String, unique: true },  
    modified: { type: Date, default: Date.now } });

如何摆脱这种情况?当我删除unique:true并重新启动应用程序时,架构不会更新。

mongodb如何处理"改变"架构?

3 个答案:

答案 0 :(得分:8)

“mongodb如何处理”改变模式?“

MongoDB是架构

强制执行唯一性的唯一因素是您所在的索引级别 可以使用唯一标准在集合上定义索引。所以你可能想删除 相关索引并在必要时重新创建。

答案 1 :(得分:2)

我希望这会有所帮助

db.collection.getIndexes()

返回一个数组,该数组包含一个文档列表,这些文档标识并描述集合中的现有索引。 现在从列表中找到您的索引名称,然后如下所示删除该索引

db.users.dropIndex("your_index_name_here")

答案 2 :(得分:2)

在猫鼬模式上添加唯一约束后,将在同一键上创建索引。例如:如果您有一个名为style的架构键,那么索引将创建为style_1。即使您修改架构,已经创建的索引也仍然存在。您需要删除此索引才能重置唯一约束。

如果已安装mongoDB Compass,则可以转到collection-> indexs并将其删除。 Atlas Web界面上也可以使用相同的界面。就我而言,我在已删除的键url上有一个索引。

enter image description here