2012-09-15 13 views
6

Ho una collezione per la quale non ho bisogno di alcun indice. Memorizzo solo termini e date di ricerca dell'utente, quindi la mia collezione è molto semplice.Posso cancellare l'indice MongoDB predefinito?

class UserSearch { 

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

} 

Quando posso conservare un elemento UserSearch, la mia collezione hanno _id e indice di default su di esso.

Dalla mia conoscenza, quei campi "_id" verranno indicizzati in ram, quindi non voglio spendere memoria ram per la raccolta che ho appena archiviato e sto calcolando qualcosa ogni 12 ore.

Cerco di cancellarlo, ma non posso.

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

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

Qualche suggerimento/soluzione?

risposta

12

No, non è possibile eliminarlo.

dal MongoDB documentation, enfasi il mio;

L'Indice _id

Per tutte le collezioni tranne collezioni innevate, un indice è creato automaticamente per il campo _id. Questo indice è speciale e non può essere cancellato. L'indice _id impone l'unicità per le sue chiavi (tranne alcune situazioni con sharding).

1

Non è possibile eliminare l'indice _id una volta creato. Tuttavia è possibile creare una raccolta senza indici _id impostando l'opzione autoIndexId su false utilizzando db.createCollection ma senza _id non è possibile replicare la raccolta.

+0

In realtà non è necessario _id per la replica o lo sharding. È possibile impostare qualsiasi altro indice o indice composto. –

+1

@AdrianLopez Prendete nota dell'avvertenza: 'IMPORTANTE Per i set di repliche, non impostare autoIndexId su false. Https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection –

+0

Mi sono rivolto a questo punto nella mia risposta @KevinJohnson – styvane

Problemi correlati