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

Коригирайте „дължина/ширина е извън границите“ в MongoDB при създаване на индекс на 2dsphere

Ако получавате грешка „дължина/ширина е извън границите“, когато се опитвате да създадете индекс на 2dsphere в MongoDB, това може да се дължи на това, че координатите ви за дължина и ширина са в грешен ред.

Когато създавате GeoJSON обект, трябва първо да посочите дължината и след това географската ширина.

  • Валидни стойности за географска дължина са между -180 и 180 , и двете включително.
  • Валидни стойности за географска ширина са между -90 и 90 , и двете включително.

Ето защо, ако получавате грешка „дължина/географска ширина е извън границите“, проверете документите си, за да видите в кой ред са координатите на географската ширина и дължина.

Пример за грешка

Ето пример за колекция, наречена bars който съдържа документи с координати в грешен ред.

{
	"_id" : 1,
	"name" : "Boardwalk Social",
	"location" : {
		"type" : "Point",
		"coordinates" : [
			-16.919297718553366,
			145.77675259719823
		]
	}
}
{
	"_id" : 2,
	"name" : "The Downunder Bar",
	"location" : {
		"type" : "Point",
		"coordinates" : [
			-16.92107838010542,
			145.77621640842125
		]
	}
}

Ако се опитаме да създадем 2dsphere индекс на location поле, ще получим грешка.

Пример:

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

Резултат:

{
	"ok" : 0,
	"errmsg" : "Index build failed: 2bb26869-1dec-4484-b554-3ba55fc0c0de: Collection krankykranes.bars ( e1a99ee2-b77c-41a4-b833-25c4b3c599c3 ) :: caused by :: Can't extract geo keys: { _id: 1.0, name: \"Boardwalk Social\", location: { type: \"Point\", coordinates: [ -16.91929771855337, 145.7767525971982 ] } }  longitude/latitude is out of bounds, lng: -16.9193 lat: 145.777",
	"code" : 16755,
	"codeName" : "Location16755"
}

Пример с правилен ред на координатите

Ето отново колекцията, освен с координатите в правилния ред:

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

Сега нека създадем 2dsphere индекс на location поле:

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

Резултат:

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

Това означава, че е създаден.

Можем да проверим това с getIndexes() метод:

db.bars.getIndexes()

Резултат:

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Push операции в MongoDB

  2. MongoDB карта()

  3. Съвети за надграждане на Percona сървър за MongoDB

  4. Импортирайте данни в MongoDB от JSON файл с помощта на Java

  5. ClusterControl – всички акценти и подобрения на функциите от 2017 г