我正在尝试在集合中添加唯一的文档。然而问题是我想根据 2 个字段来决定唯一性。所以我在网上找到了解决方案。让我困惑的是,INDEX这里的目的是什么?在 RDBMS 中索引通常是用来表示行 id 的词,这里是什么意思,它如何影响唯一性?
var patientSchema = mongoose.Schema({
name : String,
fatherOrHusbandName : String,
address : String,
});
patientSchema .***index***({ email: 1, sweepstakes_id: 1 }, { unique: true });
Run Code Online (Sandbox Code Playgroud)
Sha*_*Roy 12
索引支持在 MongoDB 中高效执行查询。如果没有索引,MongoDB 必须执行集合扫描,即扫描集合中的每个文档,以选择那些与查询语句匹配的文档。如果查询存在合适的索引,MongoDB 可以使用该索引来限制它必须检查的文档数量。
欲了解更多详情,请参阅 此文档。
阅读本文档后不要感到困惑,因为本文档使用createIndex而您是代码使用index. createIndex用于MongoDB并且index用于猫鼬在内部执行MongoDB的操作。
如果您的数据库中没有数据,那么它会正常工作
patientSchema .index({ email: 1, sweepstakes_id: 1 }, { unique: true });
Run Code Online (Sandbox Code Playgroud)
但是如果你在数据库中有一些数据有重复的项目,那么你应该使用 dropDups关键字使其成为唯一索引。
但是在使用之前你应该知道一件事dropDups。如果您使用dropDups: true并且您有一些具有重复值的数据,则在您的数据库中保留一个文档,所有其他数据都将删除(重复数据)。
喜欢:
patientSchema .index({ email: 1, sweepstakes_id: 1 }, { unique: true, dropDups: true });
Run Code Online (Sandbox Code Playgroud)
小智 9
它实际上与 RDBMS 中的索引具有相同的目的。你只需要考虑一些 mongo 术语。在 mongodb 而不是表中,你有集合,而不是行,你有文档。使用 mongoose,您为集合 'Patient' 定义了模式,在此集合(索引属于 Patient 集合)中,您unique index在文档属性email和sweepstakes_id.
每次在 Patient 集合中保存文档时,mongodb 都会确保sweepstakes_id设置了电子邮件和属性的文档,这两个属性在所有其他文档中都是唯一的。
所以,而不是“行”,想想“文件”
| 归档时间: |
|
| 查看次数: |
13275 次 |
| 最近记录: |