我可以删除默认的MongoDB索引吗?

Nov*_*ato 8 indexing mongodb nosql

我有一个集合,我不需要任何索引.我只存储用户搜索词和日期,所以我的收藏非常简单.

class UserSearch {

public string Term {get; set;}
pulic DateTime Date {get;set;}

}
Run Code Online (Sandbox Code Playgroud)

当我存储一个UserSearch项时,我的集合上有_id和默认索引.

根据我的知识,那些"_id"字段将在ram中编入索引,所以我不想花费ram内存用于收集,我只是存储并且我每12小时计算一次.

我试着删除它,但我不能.

   var indexes = UserSearch(true).GetIndexes();

   //delete UserSearch Default Index
   if(UserSearch(true).IndexExistsByName("_id_"))
   {
     UserSearch(true).DropIndexByName("_id_");
   }
Run Code Online (Sandbox Code Playgroud)

有什么建议/解决方案吗?

Joa*_*son 13

不,你不能删除它.

MongoDB文档中,强调我的;

_id索引

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


sty*_*ane 5

索引一旦创建就无法删除_id。但是,您可以通过将选项设置为使用来创建没有_id索引的集合,但如果没有索引,则无法复制集合。autoIndexIdfalsedb.createCollection_id

  • `自版本 3.2 起已弃用`:autoIndexId 选项将在版本 3.4 中删除。通过 MongoDb 文档 (3认同)
  • @AdrianLopez 请注意警告:`重要对于副本集,不要将 autoIndexId 设置为 false。` https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection (2认同)