Hướng dẫn 2dsphere index mongodb - 2dsphere index mongodb

Tài liệu về nhà → Hướng dẫn sử dụng MongoDBMongoDB Manual

Chỉ số 2dsphere hỗ trợ các truy vấn tính toán hình học trên một quả cầu giống như Trái đất. 2dsphere Chỉ số hỗ trợ tất cả các truy vấn không gian địa lý của MongoDB: Truy vấn để đưa vào, giao điểm và sự gần gũi. Để biết thêm thông tin về các truy vấn không gian địa lý, xem các truy vấn không gian địa lý.

Chỉ số 2dsphere hỗ trợ dữ liệu được lưu trữ dưới dạng các đối tượng Geojson và các cặp tọa độ kế thừa (xem thêm các hạn chế trường được lập chỉ mục 2dsphere). Đối với các cặp tọa độ kế thừa, chỉ mục chuyển đổi dữ liệu thành Geojson Point2dsphere Indexed Field Restrictions). For legacy coordinate pairs, the index converts the data to GeoJSON Point

2dsphere Phiên bản chỉ mục

Sự mô tả

Phiên bản 3

MongoDB 3.2 giới thiệu phiên bản 3 của các chỉ mục 2dsphere. Phiên bản 3 là phiên bản mặc định của các chỉ mục 2dsphere được tạo trong MongoDB 3.2 trở lên.

Phiên bản 2

MongoDB 2.6 giới thiệu phiên bản 2 của các chỉ mục 2dsphere. Phiên bản 2 là phiên bản mặc định của các chỉ mục 2dsphere được tạo trong loạt MongoDB 2.6 và 3.0.

Để ghi đè phiên bản mặc định và chỉ định một phiên bản khác, bao gồm tùy chọn

db.places.insertMany( [
{
loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Parks"
},
{
loc : { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category : "Airport"
}
] )
5 khi tạo chỉ mục.

Phiên bản 2 và các chỉ mục 2dsphere sau này luôn thưa thớt và bỏ qua tùy chọn thưa thớt. Nếu một tài liệu thiếu trường chỉ mục 2dsphere (hoặc trường là

db.places.insertMany( [
{
loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Parks"
},
{
loc : { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category : "Airport"
}
] )
8 hoặc một mảng trống), MongoDB sẽ không thêm mục nhập cho tài liệu vào chỉ mục. Để chèn, MongoDB chèn tài liệu nhưng không thêm vào chỉ số 2dsphere.

Đối với một chỉ mục ghép bao gồm khóa chỉ mục 2dsphere cùng với các khóa của các loại khác, chỉ trường chỉ mục 2dsphere xác định liệu chỉ mục có tham chiếu tài liệu hay không.

Các phiên bản trước của MongoDB chỉ hỗ trợ các chỉ mục

db.places.createIndex( { loc : "2dsphere" } )

2. Các chỉ mục

db.places.createIndex( { loc : "2dsphere" } )

2 không thưa thớt theo mặc định và sẽ từ chối các tài liệu với các trường vị trí
db.places.insertMany( [
{
loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Parks"
},
{
loc : { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category : "Airport"
}
] )
8.

Phiên bản 2 và các chỉ mục sau này bao gồm hỗ trợ cho đối tượng Geojson bổ sung:

db.places.createIndex( { loc : "2dsphere" } )

6,

db.places.createIndex( { loc : "2dsphere" } )

7,

db.places.createIndex( { loc : "2dsphere" } )

8 và

db.places.createIndex( { loc : "2dsphere" } )

9. Để biết chi tiết về tất cả các đối tượng Geojson được hỗ trợ, xem các đối tượng Geojson.

Bắt đầu từ MongoDB 4.0, bạn có thể chỉ định tùy chọn

db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

0 cho giai đoạn đường ống

db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

1 để chỉ ra đường dẫn trường được lập chỉ mục sử dụng. Điều này cho phép giai đoạn

db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

1 được sử dụng trên bộ sưu tập có nhiều chỉ mục 2dsphere và/hoặc nhiều chỉ mục 2D:

  • Nếu bộ sưu tập của bạn có nhiều chỉ mục 2dsphere và/hoặc nhiều chỉ mục 2D, bạn phải sử dụng tùy chọn

    db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

    0 để chỉ định đường dẫn trường được lập chỉ mục sử dụng.

  • Nếu bạn không chỉ định

    db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

    0, bạn không thể có nhiều chỉ mục 2dsphere và/hoặc nhiều chỉ mục 2D vì không có

    db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

    0, hãy chọn chỉ mục giữa nhiều chỉ mục

    db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

    9 hoặc 2dsphere chỉ mục là mơ hồ.

Ghi chú

Nếu bạn không chỉ định

db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

0 và bạn chỉ có nhiều nhất một chỉ mục 2dsphere và/hoặc chỉ có một chỉ mục 2D, MongoDB trước tiên sẽ tìm kiếm một chỉ mục

db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

9 để sử dụng. Nếu một chỉ mục

db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

9 không tồn tại, thì MongoDB tìm kiếm một chỉ số 2dsphere để sử dụng.

Bạn không thể sử dụng chỉ mục 2dsphere làm khóa Shard khi thu thập bộ sưu tập. Tuy nhiên, bạn có thể tạo một chỉ mục không gian địa lý trên bộ sưu tập Sharded bằng cách sử dụng một trường khác làm phím Shard.

Các trường có chỉ mục 2DSphere phải giữ dữ liệu hình học dưới dạng các cặp tọa độ hoặc dữ liệu Geojson. Nếu bạn cố gắng chèn một tài liệu với dữ liệu phi hình học trong trường được lập chỉ mục 2dsphere hoặc xây dựng chỉ mục 2dsphere trên một bộ sưu tập trong đó trường được lập chỉ mục có dữ liệu phi hình học, hoạt động sẽ không thành công.

Để tạo các khóa cho chỉ số 2DSPHERE,

db.places.createIndex( { category : 1 , loc : "2dsphere" } )

9 bản đồ định hình Geojson thành một biểu diễn nội bộ. Các biểu diễn nội bộ kết quả có thể là một loạt các giá trị lớn.

Khi

db.places.createIndex( { category : 1 , loc : "2dsphere" } )

9 tạo các khóa chỉ mục trên một trường giữ một mảng,

db.places.createIndex( { category : 1 , loc : "2dsphere" } )

9 sẽ tạo một khóa chỉ mục cho mỗi phần tử mảng. Đối với các chỉ số hợp chất,

db.places.createIndex( { category : 1 , loc : "2dsphere" } )

9 tính toán sản phẩm Cartesian của các bộ khóa được tạo cho mỗi trường. Nếu cả hai bộ đều lớn, thì việc tính toán sản phẩm Cartesian có thể khiến hoạt động vượt quá giới hạn bộ nhớ.

2dsphere3 giới hạn số lượng khóa tối đa được tạo cho một tài liệu duy nhất để ngăn chặn các lỗi bộ nhớ. Mặc định là các phím chỉ số 100000 cho mỗi tài liệu. Có thể tăng giới hạn, nhưng nếu một thao tác yêu cầu nhiều khóa hơn tham số 2dsphere3 chỉ định, thì thao tác sẽ không thành công.

Để tạo chỉ mục 2dsphere, hãy sử dụng phương thức 2dsphere6 và chỉ định chuỗi chữ 2dsphere7 làm loại chỉ mục:

db.collection.createIndex( { <location field> : "2dsphere" } )

trong đó 2dsphere8 là một trường có giá trị là đối tượng Geojson hoặc một cặp tọa độ kế thừa.

Không giống như chỉ số hợp chất 2D có thể tham chiếu một trường vị trí và một trường khác, chỉ số hợp chất 2dsphere có thể tham chiếu nhiều trường vị trí và địa điểm.

Đối với các ví dụ sau, hãy xem xét một bộ sưu tập 2dsphere0 với các tài liệu lưu trữ dữ liệu vị trí là điểm geojson trong một trường có tên 2dsphere1:

db.places.insertMany( [
{
loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Parks"
},
{
loc : { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category : "Airport"
}
] )

Hoạt động sau tạo chỉ mục 2DSPHERE trên trường vị trí 2dsphere1:

db.places.createIndex( { loc : "2dsphere" } )

Một chỉ số ghép có thể bao gồm khóa chỉ số 2dsphere kết hợp với các khóa chỉ số phi geospatial.Ví dụ: thao tác sau đây tạo ra một chỉ số ghép trong đó khóa đầu tiên 2dsphere1 là khóa chỉ số 2dsphere và các khóa còn lại 2dsphere6 và 2dsphere7 là các khóa chỉ số không geSpatial, đặc biệt giảm dần (2dsphere8) và tăng dần (2dsphere9).

db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

Không giống như chỉ số 2D, chỉ số hợp chất 2dsphere không yêu cầu trường vị trí là trường đầu tiên được lập chỉ mục.Ví dụ:

db.places.createIndex( { category : 1 , loc : "2dsphere" } )