Die Mongo-Dokumentation besagt: "Wenn ein Dokument in einer Sammlung mit eindeutigen Indizes gespeichert wird, werden alle fehlenden indizierten Schlüssel mit Nullwerten eingefügt. Daher ist es nicht möglich, mehrere Dokumente einzufügen, denen der gleiche indizierte Schlüssel fehlt. "
Ist es also unmöglich, einen eindeutigen Index für ein optionales Feld zu erstellen? Sollte ich auch einen zusammengesetzten Index mit einer userID erstellen, um das zu lösen? In meinem speziellen Fall habe ich eine Benutzersammlung mit einem optionalen eingebetteten oauth-Objekt. z.B.
%Vor%Mein Beispielbenutzer
%Vor%Ich glaube, dass dies möglich ist: Sie können einen Index haben, der spärlich und einzigartig ist. Auf diese Weise gelangen nicht existierende Werte niemals in den Index, daher können sie nicht dupliziert werden.
Vorbehalt : Dies ist mit zusammengesetzten Indizes nicht möglich. Ich bin mir deiner Frage nicht ganz sicher. Sie zitieren einen Teil der Dokumentation, die zusammengesetzte Indizes betrifft - dort werden fehlende Werte eingefügt, aber aus Ihrer Frage, ich denke, Sie suchen nicht nach einer Lösung mit zusammengesetzten Indizes?
Hier ist ein Beispiel:
%Vor%Beachten Sie auch, dass zusammengesetzte Indizes nicht spärlich sein können
Es ist nicht unmöglich, ein optionales Feld zu indizieren. Die Dokumente sprechen über einen eindeutigen Index. Sobald Sie einen eindeutigen Index angegeben haben, können Sie nur ein Dokument pro Wert für dieses Feld einfügen, auch wenn dieser Wert null ist.
Wenn Sie einen eindeutigen Index für ein optionales Feld wünschen, aber trotzdem mehrere Nullen zulassen, können Sie versuchen, den Index sowohl eindeutig als auch spärlich zu machen, obwohl ich keine Ahnung habe, ob das möglich ist. Ich konnte keine Antwort in der Dokumentation finden.
Es gibt keine gute Möglichkeit, ein optionales Feld eindeutig zu indizieren. Sie können es entweder mit einem Standardwert füllen (die _id für den Benutzer würde funktionieren), Ihre Zugriffsebene die Eindeutigkeit erzwingen lassen oder Ihr "Schema" ein wenig ändern.
Wir haben eine separate Sammlung für oauth Login-Token, teilweise aus diesem Grund. Wir müssen nie wirklich auf diese in einem Kontext zugreifen, in dem es ein offensichtlicher Gewinn ist, sie als eingebettete Dokumente zu haben. Wenn dies eine relativ einfache Änderung ist, ist es wahrscheinlich die beste Wahl.
---- bearbeiten ----
Wie die anderen Antworten zeigen, können Sie dies mit einem spärlichen Index erreichen. Es ist sogar eine dokumentierte Verwendung. Sie sollten wahrscheinlich eine dieser Antworten anstelle von mir akzeptieren.
Tags und Links mongodb