Mongoose Schema 中索引的用途

use*_*079 5 mongoose mongodb

我正在尝试在集合中添加唯一的文档。然而问题是我想根据 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在文档属性emailsweepstakes_id.

每次在 Patient 集合中保存文档时,mongodb 都会确保sweepstakes_id设置了电子邮件和属性的文档,这两个属性在所有其他文档中都是唯一的。

所以,而不是“行”,想想“文件”