我在使用Mongoose / MongoDb创建唯一索引时遇到问题,无法正常工作。设置唯一索引后,可以添加两个具有相同属性值的文档。

我已经尝试了所有我能想到的-重新启动(一切)更改语法等。



加法>>

这是我用来保存实体的方法:

  create  : function(entity, definition, successFn, errorFn){

    var model = mongoose.model(entity);
    newModel = new model(definition);

    newModel.save(function(error) {
      if(error){
        if(!errorFn){
          throw error;
        }
        errorFn(newModel);
        return;
      }

      successFn(newModel);
    });
  }...

<<
var Something = new Schema({
  objectId          : ObjectId,
  name              : { type : String, index: { unique: true }},
  url               : { type : String, index: { unique: true }},
...etc
mongoose.model('Something', Something);

Mongo输出
 [conn1] insert xxxxx.agencies 1526ms
 [conn1] building new index on { name: 1 } for xxxxx.agencies
 [conn1] insert xxxxx.system.indexes exception 11000 E11000 duplicate key error    index: xxxxx.agencies.$name_1  dup key: { : "something" } 4ms
 [conn1] building new index on { url: 1 } for xxxxx.agencies
 [conn1] insert xxxxx.system.indexes exception 11000 E11000 duplicate key error index: xxxxx.agencies.$url_1  dup key: { : "http://www.something.com" } 1ms

当我 checkin MongoHub时,没有出现索引,因此它们看起来好像不是已创建。

这是this question的副本,但没有适合我的答案。

最佳答案

一种不涉及擦除数据库的解决方案,就是手动删除所有重复项,然后按照以下方式运行:

db.users.ensureIndex({email:1},{unique:true,sparse:true});

从蒙哥壳

07-24 18:14