Mongodb 确保索引时添加_id?

Mongodb 确保索引时添加_id?,mongodb,Mongodb,我正在使用Codeigniter(PHP)和MongoDB构建一个webapp。 我正在创建索引,有一个问题 如果我正在查询三个字段(_id、status、type)并希望 创建索引在确保索引如下时,我是否需要包括_id: db.comments.ensureIndex({_id: 1, status : 1, type : 1}); 或者这会到期吗 db.comments.ensureIndex({status : 1, type : 1}); 您不需要在_id字段上隐式创建索引,它是自动

我正在使用Codeigniter(PHP)和MongoDB构建一个webapp。 我正在创建索引,有一个问题

如果我正在查询三个字段(_id、status、type)并希望 创建索引在确保索引如下时,我是否需要包括_id:

db.comments.ensureIndex({_id: 1, status : 1, type : 1});
或者这会到期吗

db.comments.ensureIndex({status : 1, type : 1});

您不需要在_id字段上隐式创建索引,它是自动完成的。见:

id索引

对于除capped集合之外的所有集合,将自动为_id字段创建索引。此索引是特殊的,无法删除。_id索引强制其键的唯一性(切分的某些情况除外)


MongoDB目前只使用
$或
查询除外。如果您的公共查询总是在这三个字段(_id、status、type)上搜索,那么复合索引将非常有用


在DB shell中,您可以在查询中使用命令来获取所用索引的信息。

如果要将
\u id
包含在复合索引中,您需要在
ensureIndex
调用中显式地包含它。但是,因为按
\u id
进行过滤已经提供了对单个文档的选择性,这很少是正确的做法。我认为只有当您的文档非常大并且您正在尝试使用时,这才有意义。

是的,但是当我创建复合索引时,就不需要了?@pangabiMC:id
字段也是如此,如果您只查询_id,那么它非常有用。最初的问题是关于一个复合索引,用于查询搜索_id和其他两个字段@JonathanClark:如果_id是搜索条件的一部分,并且您使用的是复合索引,那么您确实希望包含_id。是的,我没有注意到它是一个复合索引,所以我的答案实际上是无用的。如果我可以的话,我会把它拿走。。。