Javascript 唯一索引不适用于Mongoose/MongoDB
我在使用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
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});