MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Perbaiki "bujur/lintang di luar batas" di MongoDB saat Membuat Indeks 2dsphere

Jika Anda mendapatkan kesalahan “bujur/lintang di luar batas” saat mencoba membuat indeks 2dsphere di MongoDB, itu bisa jadi karena koordinat bujur dan lintang Anda berada dalam urutan yang salah.

Saat membuat objek GeoJSON, Anda harus membuat daftar garis bujur terlebih dahulu, lalu garis lintang.

  • Nilai bujur yang valid adalah antara -180 dan 180 , keduanya inklusif.
  • Nilai garis lintang yang valid adalah antara -90 dan 90 , keduanya inklusif.

Oleh karena itu, jika Anda mendapatkan kesalahan “bujur/lintang di luar batas”, periksa dokumen Anda untuk melihat urutan koordinat lintang dan bujur.

Contoh Kesalahan

Berikut ini contoh koleksi yang disebut bars yang berisi dokumen dengan koordinat dalam urutan yang salah.

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

Jika kita mencoba membuat indeks 2dsphere pada location bidang, kami akan mendapatkan kesalahan.

Contoh:

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

Hasil:

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

Contoh dengan Urutan Koordinat yang Benar

Ini koleksinya lagi, kecuali dengan urutan koordinat yang benar:

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

Sekarang mari kita buat indeks 2dsphere pada location bidang:

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

Hasil:

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

Ini berarti bahwa itu diciptakan.

Kita dapat memeriksanya dengan getIndexes() metode:

db.bars.getIndexes()

Hasil:

[
	{
		"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. Dokumen Baca dan sisipkan dengan penguncian/transaksi di nodejs dengan mongodb

  2. Bagaimana cara menguji unit metode yang terhubung ke mongo, tanpa benar-benar terhubung ke mongo?

  3. Bagaimana cara mengganti substring dalam dokumen mongodb

  4. MongoDB $inc

  5. Penentu Format MongoDB $dateToString