MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Khắc phục “kinh độ / vĩ độ nằm ngoài giới hạn” trong MongoDB khi tạo Chỉ mục 2dsphere

Nếu bạn gặp phải lỗi "kinh độ / vĩ độ nằm ngoài giới hạn" khi cố gắng tạo chỉ mục 2dsphere trong MongoDB, thì có thể do tọa độ kinh độ và vĩ độ của bạn không đúng thứ tự.

Khi bạn tạo một đối tượng GeoJSON, bạn cần liệt kê kinh độ trước rồi đến vĩ độ.

  • Các giá trị kinh độ hợp lệ nằm trong khoảng -180180 , bao gồm cả hai.
  • Các giá trị vĩ độ hợp lệ nằm trong khoảng -9090 , bao gồm cả hai.

Do đó, nếu bạn gặp phải lỗi "kinh độ / vĩ độ nằm ngoài giới hạn", hãy kiểm tra tài liệu của bạn để xem vĩ độ và kinh độ nằm ở thứ tự nào.

Ví dụ về Lỗi

Dưới đây là ví dụ về tập hợp có tên là bars chứa các tài liệu có tọa độ không đúng thứ tự.

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

Nếu chúng tôi cố gắng tạo chỉ mục 2dsphere trên location , chúng tôi sẽ gặp lỗi.

Ví dụ:

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

Kết quả:

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

Ví dụ với Thứ tự Tọa độ Chính xác

Đây là bộ sưu tập một lần nữa, ngoại trừ các tọa độ theo đúng thứ tự:

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

Bây giờ, hãy tạo chỉ mục 2dsphere trên location lĩnh vực:

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

Kết quả:

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

Điều này có nghĩa là nó đã được tạo ra.

Chúng tôi có thể kiểm tra điều này bằng getIndexes() phương pháp:

db.bars.getIndexes()

Kết quả:

[
	{
		"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. Dump Bộ sưu tập Mongo sang định dạng JSON

  2. Những thông số nào được chuyển cho lệnh gọi lại Mongoose

  3. 3 cách sắp xếp tài liệu trong MongoDB

  4. MongoDB $ setEquals

  5. MongoDB $ hoặc Nhà điều hành đường ống tổng hợp