mongoDB中的'name'字段是否自动成为索引?

时间:2017-02-18 11:09:40

标签: node.js mongodb mongoose

这是我得到的错误: MongoError insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.events.$name_1 dup key: { : "Event name" }

Mongo说字段'_id'和'name'是索引。这是名称字段的条目。

我删除了索引,如下所示:Mongoose - caused by :: 11000 E11000 duplicate key error index?现在它完美无缺。但为什么它是一个开始的索引? 是否有自动设置为索引的字段?

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var eventSchema = new Schema({
    name: {
        type: String,
        required: true
    }
    //other fields
});

eventSchema.index({ name: 0 });
mongoose.model('Event', eventSchema);

PS:我尝试使用eventSchema.index({ name: 0 });删除索引,但它似乎没有做任何事情。

1 个答案:

答案 0 :(得分:1)

默认情况下,MongoDB仅将_id设置为索引。

创建集合时,您可以为字段name添加索引,例如eventSchema.index({ name: 0 });

现在,coolection Event包含字段名称的索引。

为了解决这个问题,你可以做很多事情。

1)使用像@chridam建议的代码删除索引。别忘了也从代码中删除eventSchema.index({ name: 0 });。因为它将在下次运行时再次创建索引。

2)从DB中删除集合。删除此行eventSchema.index({ name: 0 });。再次运行代码。现在收集将是索引。

3)或者您可以使name索引不唯一。

希望这有帮助。