【发布时间】:2019-08-11 02:48:08
【问题描述】:
我想使用唯一的复合索引来强制文档中某些字段的唯一性。
使用mongoose时创建索引有两种方式:
- 通过重启 MongoDB
- 致电
Model.ensureIndexes()
(1.) The mongoose documentation clearly states那个
当您的应用程序启动时,Mongoose 会自动 为架构中定义的每个索引调用 createIndex。
[...]
虽然很适合开发,但建议在生产中禁用此行为,因为创建索引会导致 significant performance impact。
而且,每次将新文档添加到集合中时重新启动数据库似乎并不真正“高效”。
第二种创建索引的方法也是如此:
不建议您在生产环境中运行它。根据您的负载,索引创建可能会影响数据库性能。谨慎使用。
Source
将此问题扩展到特定示例:
对于每个文档,两个特定字段的组合应该是唯一的(例如“年份”和“课程”),因此我使用了唯一的复合索引。
保存新文档后,可能会有第二个具有相同值的请求会触发错误,因为它是重复的。
如果尚未创建索引,则无论如何都会保存该文档。
所以它是关于(正如标题试图强调的那样)确保唯一性。也许每次保存新文档时都使用索引并重建它们不是正确的方法;我对替代方案持开放态度。
那么我们应该如何确保唯一性呢?
【问题讨论】:
-
@Igor 这不是重复的。您引用的问题是关于使用索引时查询速度的提高。当然,在这种情况下,不必重建索引。但是看这个问题:github.com/Automattic/mongoose/issues/…这个问题是关于如何保证唯一性的。 It's more related to this.如果添加另一个文档时没有重建索引,我们尝试保存重复时不会出错。