在Dropping Collection之后,在保存第一条记录时会重新进行收集,但为什么不是它的索引呢?

时间:2014-02-05 22:26:46

标签: javascript node.js mongodb express mongoose

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

由于我的Model有三个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();
        }
    });
}

2 个答案:

答案 0 :(得分:1)

简单的原因是您删除了集合,索引为attached到集合中。你的问题基本上与现有帖子相反:

In MongoDB, if collection is dropped, indexes dropped automatically as well?

您可能想要的是remove。如果没有参数或空查询文档,它将删除集合中的所有文档。然而,索引仍然存在。

答案 1 :(得分:1)

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

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