我知道我应该removeAll
文件而不是放弃收藏品。但是为什么mongoose在集合被删除后没有重新创建索引?
我有一个架构,其中一个字段设置了unique:true
。
我启动服务器时创建索引。但是,如果我删除集合,并且新记录到来,则会重新创建集合并插入记录。但是,不会再次创建唯一字段的索引。
为什么会这样?我如何要求它重新创建索引?
答案 0 :(得分:2)
它与 unique 无关。如果删除mongodb中的索引,则必须重新启动节点。
当您的应用程序启动时,Mongoose会自动调用 ensureIndex用于架构中的每个已定义索引。猫鼬会打电话 依次为每个索引确保索引,并发出一个'索引'活动 所有ensureIndex调用成功或存在时的模型 一个错误。虽然很适合开发,但建议使用此行为 在生产中被禁用,因为索引创建可能会导致重大问题 绩效影响。
尽管如此,在开发模式下,您可以使用以下方法重新创建方法中的索引(例如,与路由或事件关联的方法):
(Mongodb > 3.0) db.collection.createIndex({})
(Mongodb < 3.0) db.collection.ensureIndex({})
使用Mongoose,它看起来像这样:
Model.ensureIndexes(function (err) {
if (err) {
return res.end(err);
}
});