Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 唯一索引不适用于Mongoose/MongoDB_Javascript_Mongodb_Node.js_Mongoose - Fatal编程技术网

Javascript 唯一索引不适用于Mongoose/MongoDB

Javascript 唯一索引不适用于Mongoose/MongoDB,javascript,mongodb,node.js,mongoose,Javascript,Mongodb,Node.js,Mongoose,我在使用Mongoose/MongoDb创建唯一索引时遇到问题,无法使其正常工作。设置唯一索引后,我可以添加两个具有相同属性值的文档 我已经尝试了我能想到的一切——重新启动(一切)、更改语法等等 代码 添加>> 这是我用来保存实体的方法: create : function(entity, definition, successFn, errorFn){ var model = mongoose.model(entity); newModel = new model(de

我在使用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);
    });
  }...

看起来索引创建失败,因为MongoDB集合中已经存在重复数据。如果可能,请尝试删除所有数据,然后以空集合重新开始。

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

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

中,由于您希望在收藏中应用唯一索引,我建议您删除任何重复的文档。以下是执行此操作的代码:

在Mongo shell客户端中:

db.agencies.ensureIndex({name: 1}, {unique: true, dropDups: true});
db.agencies.ensureIndex({url: 1}, {unique: true, dropDups: true});

谢谢,迈克,我已经试过了。您看到的输出实际上是在一个全新的DB之后。尽管你的观点可能会让我觉得我使用Mongoose是错误的。/*Necroposting*/节点mongodb native的解决方案
db.users.ensureIndex({email:1},{unique:true,sparse:true});
db.agencies.ensureIndex({name: 1}, {unique: true, dropDups: true});
db.agencies.ensureIndex({url: 1}, {unique: true, dropDups: true});