2012-09-15 24 views
6

Tengo una colección para la que no necesito ningún índice. Solo guardo el término y la fecha de búsqueda del usuario, por lo que mi colección es realmente simple.¿Puedo eliminar el índice MongoDB predeterminado?

class UserSearch { 

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

} 

Cuando almaceno un elemento UserSearch, mi colección tiene _id e índice predeterminado en él.

Según mi conocimiento, esos campos "_id" se indexarán en RAM, por lo que no quiero gastar memoria RAM para la recopilación que acabo de almacenar y estoy calculando algo cada 12 horas.

Intento eliminarlo, pero no puedo.

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

    //delete UserSearch Default Index 
    if(UserSearch(true).IndexExistsByName("_id_")) 
    { 
    UserSearch(true).DropIndexByName("_id_"); 
    } 

¿Alguna sugerencia/solución?

Respuesta

12

No, no puede eliminarlo.

Del MongoDB documentation, énfasis mío;

El Índice _id

Para todas las colecciones, excepto colecciones tapados, un índice es crea automáticamente para el campo _id. Este índice es especial y no se puede eliminar. El índice _id impone la unicidad para sus claves (excepto en algunas situaciones con fragmentación).

1

Una vez creado, no puede eliminar el índice _id. Sin embargo, puede crear una colección sin índices _id estableciendo la opción autoIndexId en false usando db.createCollection pero sin _id no puede replicar su colección.

+0

En realidad, no necesita _id para duplicar o fragmentar. Puede establecer cualquier otro índice o índice compuesto. –

+1

@AdrianLopez Tenga en cuenta la advertencia: 'IMPORTANTE Para conjuntos de réplicas, no configure autoIndexId en falso. 'Https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection –

+0

Abordé ese punto en mi respuesta @KevinJohnson – styvane

Cuestiones relacionadas