下面是我删除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();
}
});
}
答案 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
});