MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Napraw „długość/szerokość geograficzna jest poza granicami” w MongoDB podczas tworzenia indeksu 2dsphere

Jeśli podczas próby utworzenia indeksu 2dsphere w MongoDB pojawia się błąd „długość/szerokość geograficzna jest poza granicami”, może to być spowodowane niewłaściwą kolejnością współrzędnych długości i szerokości geograficznej.

Kiedy tworzysz obiekt GeoJSON, musisz najpierw podać długość geograficzną, a następnie szerokość geograficzną.

  • Prawidłowe wartości długości geograficznej mieszczą się w przedziale -180 i 180 , zarówno włącznie.
  • Prawidłowe wartości szerokości geograficznej mieszczą się w przedziale -90 i 90 , zarówno włącznie.

Dlatego jeśli otrzymujesz błąd „długość/szerokość geograficzna jest poza granicami”, sprawdź dokumenty, aby zobaczyć, w jakiej kolejności są współrzędne szerokości i długości geograficznej.

Przykład błędu

Oto przykład kolekcji o nazwie bars który zawiera dokumenty ze współrzędnymi w złej kolejności.

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

Jeśli spróbujemy utworzyć indeks 2dsphere w location pole, otrzymamy błąd.

Przykład:

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

Wynik:

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

Przykład z prawidłową kolejnością współrzędnych

Oto kolekcja ponownie, z wyjątkiem współrzędnych w prawidłowej kolejności:

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

Teraz utwórzmy indeks 2dsphere w location pole:

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

Wynik:

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

Oznacza to, że został stworzony.

Możemy to sprawdzić za pomocą getIndexes() metoda:

db.bars.getIndexes()

Wynik:

[
	{
		"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. Utwórz indeks tekstowy z różnymi wagami pól w MongoDB

  2. Użyj operatora $gte i <e mongo, jeśli data jest w formacie ciągu w mongodb

  3. Jak skopiować bazę danych z jednego serwera MongoDB na inny?

  4. MongoDB - Utwórz dokument

  5. Dlaczego mangusta zawsze dodaje s na końcu nazwy mojej kolekcji?