O MongoDB fornece os seguintes tipos de índice geoespacial que suportam consultas geoespaciais.
- Os índices 2D são compatíveis com consultas que calculam geometrias em um plano bidimensional.
2dsphereos índices são compatíveis com consultas que calculam geometrias em uma esfera semelhante à Terra.
Neste artigo, crio um
2dsphere índice. Coleção de exemplo
Suponha que tenhamos uma coleção chamada
bars com os seguintes documentos:{
"_id" : 1,
"name" : "Boardwalk Social",
"location" : {
"type" : "Point",
"coordinates" : [
145.77675259719823,
-16.919297718553366
]
}
}
{
"_id" : 2,
"name" : "The Downunder Bar",
"location" : {
"type" : "Point",
"coordinates" : [
145.77621640842125,
-16.92107838010542
]
}
}
{
"_id" : 3,
"name" : "Riley",
"location" : {
"type" : "Point",
"coordinates" : [
145.7739955395154,
-16.916028253292883
]
}
}
{
"_id" : 4,
"name" : "Salt House",
"location" : {
"type" : "Point",
"coordinates" : [
145.78148426655065,
-16.91823513430776
]
}
}
{
"_id" : 5,
"name" : "Rattle n Hum",
"location" : {
"type" : "Point",
"coordinates" : [
145.77746095331537,
-16.920051942529685
]
}
} Cada documento tem informações de localização armazenadas como um objeto GeoJSON.
Um objeto GeoJSON tem um campo chamado
type que especifica o tipo de objeto GeoJSON e um campo chamado coordinates que especifica as coordenadas do objeto. Criar o índice 2dsphere
Agora vamos criar o
2dsphere índice. db.bars.createIndex( { location : "2dsphere" } ) Saída:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
} A
2dsphere índice já foi criado. Agora podemos usar o
getIndexes() método para verificar nosso índice:db.bars.getIndexes() Resultado:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"location" : "2dsphere"
},
"name" : "location_2dsphere",
"2dsphereIndexVersion" : 3
}
] Podemos ver que o índice foi criado como um
2dsphere index, usando 2dsphereIndexVersion de 3 , que é a versão padrão para minha instalação atual do MongoDB (4.4). Criar um Índice 2dsphere Composto
Você pode incluir
2dsphere chaves de índice em índices compostos que são combinados com chaves de índice não geoespaciais. Por exemplo, poderíamos ter combinado nossa
location campo com o name campo para criar um índice composto. Vamos descartar o índice e criar um índice composto:
db.bars.dropIndex("location_2dsphere")
db.bars.createIndex( { location : "2dsphere", name : 1 } ) Saída:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
} E verifique o índice:
db.bars.getIndexes() Resultado:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"location" : "2dsphere",
"name" : 1
},
"name" : "location_2dsphere_name_1",
"2dsphereIndexVersion" : 3
}
] Composto
2dsphere os índices podem fazer referência a vários campos de local e não local. Isso contrasta com o composto 2d índices, que se limitam a referenciar apenas um campo de localização e um outro campo. Alterando a 2dsphereIndexVersion
Você pode alterar o
2dsphereIndexVersion adicionando-o como um campo com o valor desejado ao criar o índice. Exemplo:
db.bars.createIndex(
{ location : "2dsphere" },
{ "2dsphereIndexVersion" : 2 }
) Saída:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
} Confira o índice:
db.bars.getIndexes() Resultado:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"location" : "2dsphere"
},
"name" : "location_2dsphere",
"2dsphereIndexVersion" : 2
}
] Este índice foi criado como um
2dsphere versão do índice 2. A versão 2 é a versão padrão do
2dsphere índices criados nas séries MongoDB 2.6 e 3.0. A versão 3 é a versão padrão do
2dsphere índices criados no MongoDB 3.2 e posterior (no momento da escrita). Quando criei o índice sem especificar o
2dsphereIndexVersion campo, ele criou o índice usando a versão 3, porque essa é a versão padrão para minha versão do MongoDB (4.4).