Mongodb Mongoose模式中索引的目的

Mongodb Mongoose模式中索引的目的,mongodb,mongoose,Mongodb,Mongoose,我正在尝试在集合中添加唯一的文档。但是问题是我想根据两个字段来确定唯一性。所以我在网上找到了解决办法。让我困惑的是,这里索引的目的是什么?在RDBMS中,索引通常是用于行id的单词,这在这里意味着什么?它如何影响唯一性 var patientSchema = mongoose.Schema({ name : String, fatherOrHusbandName : String, address : String, }); patientSchema .***index***(

我正在尝试在集合中添加唯一的文档。但是问题是我想根据两个字段来确定唯一性。所以我在网上找到了解决办法。让我困惑的是,这里索引的目的是什么?在RDBMS中,索引通常是用于行id的单词,这在这里意味着什么?它如何影响唯一性

var patientSchema = mongoose.Schema({
  name : String,
  fatherOrHusbandName : String,
  address : String,
});


patientSchema .***index***({ email: 1, sweepstakes_id: 1 }, { unique: true });

它实际上具有与RDBMS中的索引相同的用途。你只需要用蒙哥语的术语来思考。在mongodb中,您有集合,而不是行,您有文档。 使用mongoose,您为集合“患者”定义了架构,在此集合中(索引属于患者集合)您在文档属性
电子邮件
抽奖\u id
上定义了
唯一索引

每次在患者集合中保存文档时,mongodb都会确保设置了电子邮件和
抽奖\u id
属性的文档在所有其他文档中是唯一的

因此,不要使用“行”,而是使用“文档”

索引支持在MongoDB中高效执行查询。没有 索引,MongoDB必须执行集合扫描,即每 集合中的文档,以选择与 查询语句。如果查询存在适当的索引,MongoDB 可以使用索引限制必须检查的文档数量

有关更多详细信息,请参阅

阅读本文档后不要感到困惑,因为本文档使用
createIndex
,而您的代码使用
index
createIndex
用于MongoDB
index
用于内部执行MongoDB操作的mongoose

如果数据库中没有数据,那么它就可以正常工作

patientSchema .index({ email: 1, sweepstakes_id: 1 }, { unique: true });
但是,如果数据库中的某些数据包含重复项,则应使用
dropDups
关键字使其成为唯一索引

但是在使用dropDups之前,有一件事你应该知道。如果您使用的是
dropDups:true
,并且您有一些具有重复值的数据,则在数据库中保留一个文档,所有其他数据将删除(重复数据)

比如:


我还是不明白这里索引的目的。。。您能详细说明一下mongoose中的索引概念吗?好的,更具体地说:索引是mongodb的核心功能,mongoose只是帮助您在模式定义中很好地定义它(不是mongodb核心,mongo没有模式)。最后,它会在您的集合上创建一个索引,如下所述:。您只需直接在mongo数据库上创建索引即可实现相同的目标。您尝试实现的目标如下所述:,您创建的索引类型称为唯一复合索引。因此,如果您比较直接在数据库和mongoose中执行的方式,您定义的操作看起来几乎相同:mongodb:db..createIndex({email:1,sweepts\u id:1},{unique:true})mongoose:patientSchema.index({email:1,sweepts\u id:1},{unique:true});这有帮助吗?好吧,总结一下解释,索引就是这里的缓存。像Windows一样,索引文件可以快速获取。是吗?是的,mongo没有遍历整个文档,而是单独保存一个索引以供快速访问,例如,在这里检查插入新文档时是否已经存在相同的值。一般来说,索引背后也有同样的想法
patientSchema .index({ email: 1, sweepstakes_id: 1 }, { unique: true, dropDups: true });