English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Wir haben die folgenden Dokumente in die Sammlung "users" eingefügt, wie folgt –
db.users.insert( { "address": { "city": "Los Angeles" "state": "Kalifornien" "pincode": ""123" } "tags": [ "music", "cricket", "blogs" ], "name": "Tom Benzamin" } )
Das obige Dokument enthält einen Adressen-Subdokument und eine Tags-Array.
Angenommen, wir möchten nach Benutzermarken Benutzer-Dokumente durchsuchen. Dafür erstellen wir einen Index auf der Tags-Array in der Sammlung.
Bei der Erstellung eines Indexes auf einem Array, wird für jedes Feld des Arrays ein separater Indexeintrag erstellt. Daher erstellen wir in unserem Beispiel, wenn wir einen Index auf der Tags-Array erstellen, separate Indizes für die Werte music, cricket und blogs.
Um einen Index auf der Tags-Array zu erstellen, verwenden Sie folgenden Code-
>db.users.createIndex({"tags":1} { "createdCollectionAutomatically": false "numIndexesBefore": 2, "numIndexesAfter": 3, "ok": 1 } >
Nachdem der Index erstellt wurde, können wir nach dem Feld "tags" in der Sammlung suchen, wie folgt-
>db.users.find({tags:"cricket"}).pretty() "_id" : ObjectId("5dd7c927f1dd4583e7103fdf"), "address" : { "city" : "Los Angeles", "state" : "California", "pincode" : "123" } "tags" : [ "music", "cricket", "blogs" ], "name" : "Tom Benzamin" } >
Um zu überprüfen, ob der richtige Index verwendet wurde, verwenden Sie den folgenden explain-Befehl-
>db.users.find({tags:"cricket"}).explain()
Dies gibt Ihnen folgende Ergebnisse-
{ "queryPlanner": { "plannerVersion": 1, "namespace": "mydb.users" "indexFilterSet": false "tags": { } } "queryHash": ",9D3B61A7, "planCacheKey": "049997 "keyPattern": { "tags": 1 } 1, } "isPartial": false, 2, "indexBounds": { "tags" : [ "[\"cricket\", "cricket\"]" } } } } "host": "Krishna", 27017, "version": "",421, "gitVersion": "edf6d45851c0b9ee15548f0f847df141764a317e" } "ok": 1 } >
Die obige Anweisung erzeugte "cursor": "BtreeCursor tags_1”,它确认使用了正确的索引。
Angenommen, wir möchten nach den Feldern city, state und pincode suchen. Da alle diese Felder Teil der Adressen-Unterdokumente sind, erstellen wir einen Index auf allen Feldern des Unterdokuments.
Um einen Index auf allen drei Feldern des Unterdokuments zu erstellen, verwenden Sie folgenden Code-
>db.users.createIndex({"address.city":1,"address.state":1,"address.pincode":1} { "numIndexesBefore": 4, "numIndexesAfter": 4, "note": "alle Index existieren bereits", "ok": 1 } >
Nach der Erstellung eines Indexes können wir diesen Index zur Suche nach jedem Feld eines Unterdokuments verwenden, wie folgt:
> db.users.find({"address.city":"Los Angeles"}).pretty(){ "_id" : ObjectId("5dd7c927f1dd4583e7103fdf"), "address" : { "city" : "Los Angeles", "state" : "California", "pincode" : "123" } "tags" : [ "music", "cricket", "blogs" ], "name" : "Tom Benzamin" }
BitteerinnernSie sich, dass dieAbfrageausdrücke der angegebenenIndizesfolgenmüssen.DaherunterstütztderobengeschaffteIndexfolgendeAbfragen-
>db.users.find({"address.city":"Los Angeles","address.state":"California"}).pretty(){ "_id" : ObjectId("5dd7c927f1dd4583e7103fdf"), "address" : { "city" : "Los Angeles", "state" : "California", "pincode" : "123" } "tags" : [ "music", "cricket", "blogs" ], "name" : "Tom Benzamin" } >