dünnbesetzte Indexe und null-Werte in mongo
Ich bin mir nicht sicher, ob ich verstehe sparse-Indizes richtig.
Ich habe eine spärliche eindeutigen index auf fbId
{
"ns" : "mydb.users",
"key" : {
"fbId" : 1
},
"name" : "fbId_1",
"unique" : true,
"sparse" : true,
"background" : false,
"v" : 0
}
Und ich hatte erwartet, dass würde mir erlauben, zum einfügen von Datensätzen mit null als fbId, aber das wirft einen doppelten Schlüssel Ausnahme. Es ermöglicht nur mir zu legen wenn die fbId Eigenschaft ist vollständig entfernt.
Nicht einen sparse-index soll damit auf sich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sparse-Indizes nicht enthalten Dokumente, die miss indizierten Feld. Jedoch, wenn das Feld existiert und einen Wert hat, der
null
ist, wird es noch indiziert werden. Also, wenn die Abwesenheit des Feldes und seiner Geschlechter zunull
gleich Aussehen, für Ihre Anwendung und Sie pflegen wollen, ist die Einzigartigkeit derfbId
sich einfach nicht einfügen, bis Sie einen Wert für ihn.Müssen Sie die sparse-Indizes, wenn Sie eine große Anzahl von Dokumenten, sondern nur ein kleiner Teil von Ihnen enthält ein paar Felder, und Sie wollen in der Lage sein, schnell zu finden Dokumente durch das Feld. Erstellen Sie einen normalen index zu teuer wäre, würden Sie nur kostbare RAM auf Indizierung von Dokumenten, die Sie nicht interessieren.
Nehmen wir an, wir wollen einen index erstellen, der auf die oben genannten Dokumente. Erstellen von index auf
a
&b
wird kein problem sein. Aber was, wenn wir brauchen, um zu erstellen ein index aufc
. Die unique-Einschränkung wird nicht fürc
keys, da null-Wert wird dupliziert, für 2 Dokumente. Die Lösung in diesem Fall ist die Verwendungsparse
option. Mit dieser option wird die Datenbank nicht enthalten sind die Unterlagen, die findet den Schlüssel. Der Befehl in Sorge istdb.collectionName.createIndex({thing:1}, {unique:true, sparse:true})
. Die sparse-index ermöglicht es uns, verwenden weniger Raum als gut.Damit die maximale performance der Indizes, wollen wir weglassen von der Indizierung dieser Dokumente NICHT mit dem Feld, auf dem Sie die Durchführung eines index. Um dies zu tun MongoDB hat die sparse-Eigenschaft funktioniert wie folgt:
Dieser index wird es unterlassen, alle Dokumente, die nicht mit der secondAddress Feld und beim ausführen einer Abfrage, diese Dokument wird nie gescannt werden.
Lassen Sie mich teilen Sie diesen Artikel über die Indizes und einige Ihrer Eigenschaften:
Geospatial, Text, Hash-Indizes und einzigartig und Puristisch-Eigenschaften: http://mongodbspain.com/en/2014/02/03/mongodb-indexes-part-2-geospatial-2d-2dsphere/