MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Създайте 2dsphere геопространствен индекс за сферични заявки в MongoDB

MongoDB предоставя следните типове геопространствени индекси, които поддържат геопространствени заявки.

  • 2d индексите поддържат заявки, които изчисляват геометрии в двуизмерна равнина.
  • 2dsphere индексите поддържат заявки, които изчисляват геометрии на сфера, подобна на земята.

В тази статия създавам 2dsphere индекс.

Примерна колекция

Да предположим, че имаме колекция, наречена bars със следните документи:

{
	"_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
		]
	}
}

Всеки документ има информация за местоположението, съхранявана като GeoJSON обект.

Обектът GeoJSON има поле с име type който определя типа GeoJSON обект и поле с име coordinates който определя координатите на обекта.

Създайте индекса 2dsphere

Сега нека създадем 2dsphere индекс.

db.bars.createIndex( { location : "2dsphere" } )

Изход:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

2dsphere индексът вече е създаден.

Вече можем да използваме getIndexes() метод за проверка на нашия индекс:

db.bars.getIndexes()

Резултат:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"location" : "2dsphere"
		},
		"name" : "location_2dsphere",
		"2dsphereIndexVersion" : 3
	}
]

Можем да видим, че индексът е създаден като 2dsphere индекс, използвайки 2dsphereIndexVersion от 3 , което е версията по подразбиране за текущата ми инсталация на MongoDB (4.4).

Създаване на сложни 2dsphere индекс

Можете да включите 2dsphere индексни ключове в съставни индекси, които се комбинират с негеопространствени индексни ключове.

Например, бихме могли да комбинираме нашето location поле с name поле за създаване на съставен индекс.

Нека пуснем индекса и да създадем съставен индекс:

db.bars.dropIndex("location_2dsphere")
db.bars.createIndex( { location : "2dsphere", name : 1 } )

Изход:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

И проверете индекса:

db.bars.getIndexes()

Резултат:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"location" : "2dsphere",
			"name" : 1
		},
		"name" : "location_2dsphere_name_1",
		"2dsphereIndexVersion" : 3
	}
]

Съединение 2dsphere индексите могат да препращат към множество полета за местоположение и не-местоположение. Това е в контраст със съединението 2d индекси, които са ограничени до препращане само към едно поле за местоположение и едно друго поле.

Промяна на 2dsphereIndexVersion

Можете да промените 2dsphereIndexVersion като го добавите като поле с желаната стойност при създаване на индекса.

Пример:

db.bars.createIndex( 
    { location : "2dsphere" },
    { "2dsphereIndexVersion" : 2 }
)

Изход:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

Проверете индекса:

db.bars.getIndexes()

Резултат:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"location" : "2dsphere"
		},
		"name" : "location_2dsphere",
		"2dsphereIndexVersion" : 2
	}
]

Този индекс е създаден като 2dsphere индекс версия 2.

Версия 2 е версията по подразбиране на 2dsphere индекси, създадени в сериите MongoDB 2.6 и 3.0.

Версия 3 е версията по подразбиране на 2dsphere индекси, създадени в MongoDB 3.2 и по-нови (към момента на писане).

Когато създадох индекса, без да посоча 2dsphereIndexVersion поле създаде индекса, използвайки версия 3, защото това е версията по подразбиране за моята версия на MongoDB (4.4).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Свързване с MongoDB Atlas с помощта на Golang mgo:Постоянен няма достъпен сървър за набор от реплика

  2. Извършване на заявки за регулярни изрази с PyMongo

  3. Изчислете средната стойност на mongodb документ

  4. Бази данни за документи:излишни данни, препратки и т.н. (специално MongoDB)

  5. Mongodb v4.0 Transaction, MongoError:Номера на транзакции са разрешени само за член на набор от реплика или mongos