English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Inserimos os seguintes documentos na coleção chamada users, conforme exemplo a seguir–
db.users.insert( { "address": { "city": "Los Angeles" "state": "California" "pincode": ""123" } "tags": [ "music", "cricket", "blogs" ], "name": "Tom Benzamin" } )
O documento acima contém um subdocumento address e um array de tags.
Suponhamos que desejamos pesquisar documentos de usuários com base em suas tags. Para isso, criaremos um índice no array tags da coleção.
Ao criar um índice em um array, criamos itens de índice individuais para cada campo do array. Portanto, no nosso exemplo, quando criamos um índice no array tags, criamos índices individuais para os valores music, cricket e blogs.
Para criar um índice no array de tags, use o seguinte código-
>db.users.createIndex({"tags":1} { "createdCollectionAutomatically": false "numIndexesBefore": 2, "numIndexesAfter": 3, "ok": 1 } >
Após criar o índice, podemos realizar pesquisas no campo tags da coleção, conforme exemplo a seguir-
>db.users.find({tags:"cricket"}).pretty() "_id" : ObjectId("5dd7c927f1dd4583e7103fdf"), "address" : { "city" : "Los Angeles", "state" : "California", "pincode" : ""123" } "tags" : [ "music", "cricket", "blogs" ], "name" : "Tom Benzamin" } >
Para verificar se foi usado o índice correto, use o comando explain abaixo-
>db.users.find({tags:"cricket"}).explain()
Isso lhe fornece os seguintes resultados-
{ "queryPlanner": { "plannerVersion": 1, "namespace": "mydb.users" "indexFilterSet": false "tags": { } } "queryHash": ",9D3B61A7", "planCacheKey": "049997 "keyPattern": { "tags": 1 } 1", } "isPartial": false, 2, "indexBounds": { "tags" : [ } } } } "host": "Krishna", 27017, "version": "",4.2.1", "gitVersion": "edf6d45851c0b9ee15548f0f847df141764a317e" } "ok": 1 } >
1, "confirmou o uso do índice correto.",
Supondo que queremos buscar documentos com base nos campos city, state e pincode. Como todos esses campos são parte do subdocumento de endereço, criaremos índices em todos os campos do subdocumento.
Para criar índices em todos os três campos do subdocumento, use o seguinte código-
>db.users.createIndex({"address.city":1,"address.state":1,"address.pincode":1} { "numIndexesBefore": 4, "numIndexesAfter": 4, "note": "all indexes already exist", "ok": 1 } >
Após criar o índice, podemos usar esse índice para buscar qualquer campo de subdocumento, conforme mostrado a seguir:
>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" }
Lembre-se de que a expressão de consulta deve seguir a ordem dos índices especificados. Portanto, o índice criado acima suportará as seguintes consultas-
>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" } >