如何在mongoose mongodb中删除和创建索引

时间:2016-08-11 06:01:41

标签: node.js mongodb mongoose

我一直在尝试在导入数据时重置唯一键索引,如下所示:

const importData = function() {
   UserLocation.collection.dropAllIndexes((err) => {
    if (err) {
      console.trace(err);
      return;
    }
    UserLocation.collection.createIndex({
     Adfrom: 1,
     Adpto: 1
    }, {
     unique: true
    });

    fs.createReadStream(`${__dirname}/../data/import-data.csv`).pipe(parser);
   });
 };

它在我的本地环境中工作正常但是当我部署此代码时因为dropIndex而导致mongodb连接错误。

Error:
Mongoose default connection to mongodb://localhost:27017/userlocation disconnected
Mongoose default connection error: MongoError: connect ECONNREFUSED 127.0.0.1:27017

如何解决此问题。

请帮忙!

由于

2 个答案:

答案 0 :(得分:1)

您可以按

删除索引
db.collection.dropIndex("//field of which you want to drop index")

或者您可以使用索引规范文档

db.collection.dropIndex( { "//field of which you want to drop index" : -1 } )

它将删除值为-1的字段的索引。

和集合将是您的表的名称,

例如。

db.pets.dropIndex( { "cat" : -1 } )

为了创建索引,您可以快速浏览一下Create Index

您可以在mongo shell中运行这些命令。

答案 1 :(得分:0)

const schema = new Schema({ name: { type: String, unique: true } });
const Customer = mongoose.model('Customer', schema);
await Customer.collection.createIndex({ age: 1 }); // Index is not in schema
// Will drop the 'age' index and create an index on `name`
await Customer.syncIndexes();

您需要同步索引。查看此来源:https://mongoosejs.com/docs/api.html#model_Model.syncIndexes