Javascript 删除收集后,在保存第一条记录时会重新进行收集,但为什么不';它的索引是什么?

Javascript 删除收集后,在保存第一条记录时会重新进行收集,但为什么不';它的索引是什么?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,下面是我删除mongodb集合的方法。它可以工作,但在保存第一条记录后,将在没有适当索引的情况下重新创建集合 由于我的模型有三个属性unique:true,因此我需要创建这些索引,以便不保存重复项。为什么不创建实例,如何自动创建它们 型号: var ObjectSchema = new Schema({ propertyone: { type: String, required: true, unique: true, tr

下面是我删除mongodb集合的方法。它可以工作,但在保存第一条记录后,将在没有适当索引的情况下重新创建集合

由于我的模型有三个属性
unique:true
,因此我需要创建这些索引,以便不保存重复项。为什么不创建实例,如何自动创建它们

型号:

var ObjectSchema = new Schema({
    propertyone: {
        type: String,
        required: true,
        unique: true,
        trim: true
    },
    propertytwo: {
        type: String,
        required: true,
        unique: true,
        trim: true
    },
    propertythree: {
        type: String,
        required: true,
        unique: true,
        trim: true
    }
});
方法-用于删除集合

exports.dropCollection = function(collectionName, callback) {
    console.log("Dropping Collection: " + collectionName);
    // Drop in collection name string
    var collection = mongoose.connection.collections[collectionName]
    collection.drop(function(err) {
        if (err) {
            console.log(err);
            callback(err, null) 
        } else {
            console.log("Collection Deleted")
            callback();
        }
    });
}

原因很简单,您删除了集合,并且索引已附加到集合中。你的问题基本上与这篇现有文章相反:


你可能想要的是。在没有参数或空查询文档的情况下,它将删除集合中的所有文档。但是索引仍然保留。

Mongoose会在启动时自动创建模式指定的索引。如果在运行时删除一个集合(该集合在运行时删除所有数据和所有索引),则需要重新启动应用程序,或者在
模型上重新创建它们(如有必要):

MyModel.ensureIndexes(function() {
    // callback after indexes have been created
});

谢谢移除方法有效,我还需要像WiredPairie建议的那样在上面设置EnsureIndex。