2012-09-15 6 views
6

Ich habe eine Sammlung, für die ich keinen Index benötige. Ich speichere nur den Suchbegriff und das Datum des Benutzers, so dass meine Sammlung wirklich einfach ist.Kann ich den Standard MongoDB Index löschen?

Wenn ich ein UserSearch-Objekt speichern, haben meine Sammlung _id und Standardindex darauf.

Aus meinem Wissen werden diese "_id" -Felder in Ram indexiert, so dass ich nicht Ram-Speicher für die Sammlung ausgeben möchte, die ich gerade speichere und alle 12 Stunden etwas bereche.

Ich versuche, es zu löschen, aber ich kann nicht.

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

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

Jeder Vorschlag/Lösung?

Antwort

12

Nein, Sie können es nicht löschen.

Von der MongoDB documentation, Schwerpunkt meins;

Der _id Index

Für alle Sammlungen außer capped Sammlungen wird ein Index automatisch für das _id Feld erstellt. Dieser Index ist speziell und kann nicht gelöscht werden. Der _id-Index erzwingt die Eindeutigkeit für seine Schlüssel (außer in einigen Situationen mit Sharding).

1

Sie können den erstellten Index _id nicht löschen. Sie können jedoch eine Sammlung ohne _id Indizes erstellen, indem Sie die autoIndexId-Option auf false mithilfe von db.createCollection setzen, aber ohne _id können Sie Ihre Sammlung nicht replizieren.

+0

Eigentlich brauchen Sie _id nicht für Replikation oder Sharding. Sie können einen beliebigen anderen Index oder zusammengesetzten Index festlegen. –

+1

@AdrianLopez Bitte beachten Sie die Warnung: 'WICHTIG Setzen Sie für Replikatsätze autoIndexId nicht auf" false ". Https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection –

+0

Ich adressierte diesen Punkt in meiner Antwort @KevinJohnson – styvane

Verwandte Themen