Latest web development tutorials

MongoDB indexação avançada

Considere o seguinte documento de cobrança (usuários):

{
   "address": {
      "city": "Los Angeles",
      "state": "California",
      "pincode": "123"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Tom Benzamin"
}

O documento acima contém sub-documentos, e abordar um conjunto de tags.


campo de matriz indexada

Suponha que recuperar etiqueta baseada no usuário, para o qual precisamos para indexar as tags array de cobrança.

Criar um índice na matriz, a matriz das necessidades de cada campo, por sua vez indexados. Então, quando nós criar um índice para as tags array, que irá fornecer a música, cricket, blogues de três valores para estabelecer um índice separado.

Criar um índice de matriz, use o seguinte comando:

>db.users.ensureIndex({"tags":1})

Depois de criar o índice, podemos recuperar a coleção campo de tags:

>db.users.find({tags:"cricket"})

Nós utilizado para verificar o uso do índice, você pode usar o comando explicar:

>db.users.find({tags:"cricket"}).explain()

Os resultados do comando acima irá mostrar "cursor": "BtreeCursor tags_1", ele disse que o índice tem sido utilizado.


campo de sub-documento de índice

Suponha que precisamos cidade, estado, código PIN campo para recuperar documentos, como esses campos são campos subdocumento, por isso precisamos de uma indexação subdocumento.

Criar um índice para os três sub-campos do documento, o comando é como segue:

>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})

Uma vez que o índice é criado, nós podemos usar o campo para recuperar as sub-documentos de dados:

>db.users.find({"address.city":"Los Angeles"})   

Lembre-se de expressão de consulta deve seguir a ordem do índice especificado. Assim, o índice criado acima apoiará a seguinte consulta:

>db.users.find({"address.city":"Los Angeles","address.state":"California"}) 

Também suporta a seguinte consulta:

>db.users.find({"address.city":"LosAngeles","address.state":"California","address.pincode":"123"})