Hướng dẫn mongodb create index multiple fields - mongodb tạo chỉ mục nhiều trường

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

MongoDB hỗ trợ các chỉ mục hợp chất, trong đó một cấu trúc chỉ mục duy nhất giữ các tham chiếu đến nhiều trường [1] trong các tài liệu của bộ sưu tập. Biểu đồ sau đây minh họa một ví dụ về chỉ số hợp chất trên hai trường:

Hướng dẫn mongodb create index multiple fields - mongodb tạo chỉ mục nhiều trường

Các chỉ mục hợp chất có thể hỗ trợ các truy vấn phù hợp trên nhiều trường.

Để tạo một chỉ số hợp chất, hãy sử dụng thao tác giống với nguyên mẫu sau:compound index use an operation that resembles the following prototype:

db.collection.createIndex( { <field1>: <type>, <field2>: <type2>, ... } )

Giá trị của trường trong đặc tả chỉ số mô tả loại chỉ mục cho trường đó. Ví dụ: giá trị của 1 chỉ định một chỉ mục đặt hàng các mục theo thứ tự tăng dần. Giá trị của

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
0 chỉ định một chỉ mục đặt hàng các mục theo thứ tự giảm dần. Để biết các loại chỉ mục bổ sung, xem các loại chỉ mục.

Thứ tự của các trường được lập chỉ mục có tác động mạnh mẽ đến hiệu quả của một chỉ mục cụ thể cho một truy vấn nhất định. Đối với hầu hết các chỉ mục hợp chất, theo quy tắc ESR (bình đẳng, sắp xếp, phạm vi) giúp tạo ra các chỉ mục hiệu quả.

Quan trọng

Hãy xem xét một bộ sưu tập có tên

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
1 chứa các tài liệu giống với tài liệu sau:

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}

Hoạt động sau đây tạo ra một chỉ mục tăng dần trên các trường

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 và
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
3:

db.products.createIndex( { "item": 1, "stock": 1 } )

Thứ tự của các trường được liệt kê trong một chỉ số ghép là rất quan trọng. Chỉ số sẽ chứa các tham chiếu đến các tài liệu được sắp xếp đầu tiên theo các giá trị của trường

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 và, trong mỗi giá trị của trường
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2, được sắp xếp theo các giá trị của trường chứng khoán. Xem thứ tự sắp xếp để biết thêm thông tin.Sort Order for more information.

Ngoài việc hỗ trợ các truy vấn khớp trên tất cả các trường chỉ mục, các chỉ mục ghép có thể hỗ trợ các truy vấn khớp với tiền tố của các trường chỉ mục. Nghĩa là, chỉ mục hỗ trợ các truy vấn trên trường

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 cũng như cả trường
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 và
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
3:

db.products.find( { item: "Banana" } )
db.products.find( { item: "Banana", stock: { $gt: 5 } } )

Để biết chi tiết, xem tiền tố.Prefixes.

Chỉ mục lưu trữ tham chiếu đến các trường trong đơn đặt hàng tăng dần (1) hoặc giảm dần (____10). Đối với các chỉ mục trường đơn, thứ tự sắp xếp các khóa không quan trọng vì MongoDB có thể đi qua chỉ số theo một trong hai hướng. Tuy nhiên, đối với các chỉ mục hợp chất, thứ tự sắp xếp có thể quan trọng trong việc xác định liệu chỉ mục có thể hỗ trợ hoạt động sắp xếp hay không.compound indexes, sort order can matter in determining whether the index can support a sort operation.

Hãy xem xét một bộ sưu tập

db.products.createIndex( { "item": 1, "stock": 1 } )

1 chứa các tài liệu với các trường

db.products.createIndex( { "item": 1, "stock": 1 } )

2 và

db.products.createIndex( { "item": 1, "stock": 1 } )

3. Các ứng dụng có thể phát hành các truy vấn trả về kết quả được sắp xếp đầu tiên bằng cách tăng giá trị

db.products.createIndex( { "item": 1, "stock": 1 } )

2 và sau đó giảm giá (nghĩa là gần đây hơn đến cuối cùng)

db.products.createIndex( { "item": 1, "stock": 1 } )

3, chẳng hạn như:

db.events.find().sort( { username: 1, date: -1 } )

hoặc các truy vấn trả về kết quả được sắp xếp đầu tiên bằng cách giảm giá trị

db.products.createIndex( { "item": 1, "stock": 1 } )

2 và sau đó bằng cách tăng giá trị

db.products.createIndex( { "item": 1, "stock": 1 } )

3, chẳng hạn như:

db.events.find().sort( { username: -1, date: 1 } )

Chỉ mục sau đây có thể hỗ trợ cả hai hoạt động sắp xếp sau:

db.events.createIndex( { "username" : 1, "date" : -1 } )

Tuy nhiên, chỉ số trên không thể hỗ trợ sắp xếp bằng cách tăng giá trị

db.products.createIndex( { "item": 1, "stock": 1 } )

2 và sau đó bằng cách tăng giá trị

db.products.createIndex( { "item": 1, "stock": 1 } )

3, chẳng hạn như sau:cannot support sorting by ascending

db.products.createIndex( { "item": 1, "stock": 1 } )

2 values and then by ascending

db.products.createIndex( { "item": 1, "stock": 1 } )

3 values, such as the following:

db.events.find().sort( { username: 1, date: 1 } )

Để biết thêm thông tin về thứ tự sắp xếp và chỉ mục hợp chất, hãy xem các chỉ mục sử dụng để sắp xếp kết quả truy vấn.

Tiền tố chỉ mục là các tập hợp con bắt đầu của các trường được lập chỉ mục. Ví dụ, hãy xem xét chỉ số hợp chất sau:

{ "item": 1, "location": 1, "stock": 1 }

Chỉ mục có các tiền tố chỉ mục sau:

  • db.products.find( { item: "Banana" } )
    db.products.find( { item: "Banana", stock: { $gt: 5 } } )
    0

  • db.products.find( { item: "Banana" } )
    db.products.find( { item: "Banana", stock: { $gt: 5 } } )
    1

Đối với một chỉ số ghép, MongoDB có thể sử dụng chỉ mục để hỗ trợ các truy vấn trên các tiền tố chỉ mục. Do đó, MongoDB có thể sử dụng chỉ mục cho các truy vấn trên các trường sau:

  • Trường

    {
    "_id": ObjectId(...),
    "item": "Banana",
    "category": ["food", "produce", "grocery"],
    "location": "4th Street Store",
    "stock": 4,
    "type": "cases"
    }
    2,

  • Trường

    {
    "_id": ObjectId(...),
    "item": "Banana",
    "category": ["food", "produce", "grocery"],
    "location": "4th Street Store",
    "stock": 4,
    "type": "cases"
    }
    2 và trường
    db.products.find( { item: "Banana" } )
    db.products.find( { item: "Banana", stock: { $gt: 5 } } )
    4,

  • Trường

    {
    "_id": ObjectId(...),
    "item": "Banana",
    "category": ["food", "produce", "grocery"],
    "location": "4th Street Store",
    "stock": 4,
    "type": "cases"
    }
    2 và trường
    db.products.find( { item: "Banana" } )
    db.products.find( { item: "Banana", stock: { $gt: 5 } } )
    4 và trường
    {
    "_id": ObjectId(...),
    "item": "Banana",
    "category": ["food", "produce", "grocery"],
    "location": "4th Street Store",
    "stock": 4,
    "type": "cases"
    }
    3.

MongoDB cũng có thể sử dụng chỉ mục để hỗ trợ truy vấn trên các trường

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 và
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
3, vì trường
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 tương ứng với tiền tố. Tuy nhiên, trong trường hợp này, chỉ số sẽ không hiệu quả trong việc hỗ trợ truy vấn như nếu chỉ mục chỉ trên
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 và
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
3. Các trường chỉ mục được phân tích cú pháp theo thứ tự; Nếu một truy vấn bỏ qua một tiền tố chỉ mục cụ thể, không thể sử dụng bất kỳ trường chỉ mục nào theo tiền tố đó.

Vì một truy vấn trên

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 và
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
3 bỏ qua tiền tố chỉ mục
db.products.find( { item: "Banana" } )
db.products.find( { item: "Banana", stock: { $gt: 5 } } )
4, nó không thể sử dụng trường chỉ mục
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
3 sau
db.products.find( { item: "Banana" } )
db.products.find( { item: "Banana", stock: { $gt: 5 } } )
4. Chỉ trường
{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2 trong chỉ mục mới có thể hỗ trợ truy vấn này. Xem Tạo các chỉ mục để hỗ trợ các truy vấn của bạn để biết thêm thông tin.

MongoDB không thể sử dụng chỉ mục để hỗ trợ các truy vấn bao gồm các trường sau vì không có trường

{
"_id": ObjectId(...),
"item": "Banana",
"category": ["food", "produce", "grocery"],
"location": "4th Street Store",
"stock": 4,
"type": "cases"
}
2, không có trường nào được liệt kê tương ứng với chỉ mục tiền tố:

  • Trường

    db.products.find( { item: "Banana" } )
    db.products.find( { item: "Banana", stock: { $gt: 5 } } )
    4,

  • Trường

    {
    "_id": ObjectId(...),
    "item": "Banana",
    "category": ["food", "produce", "grocery"],
    "location": "4th Street Store",
    "stock": 4,
    "type": "cases"
    }
    3, hoặc

  • Các trường

    db.products.find( { item: "Banana" } )
    db.products.find( { item: "Banana", stock: { $gt: 5 } } )
    4 và
    {
    "_id": ObjectId(...),
    "item": "Banana",
    "category": ["food", "produce", "grocery"],
    "location": "4th Street Store",
    "stock": 4,
    "type": "cases"
    }
    3.

Nếu bạn có một bộ sưu tập có cả chỉ mục ghép và chỉ mục trên tiền tố của nó (ví dụ:

db.events.find().sort( { username: -1, date: 1 } )

4 và

db.events.find().sort( { username: -1, date: 1 } )

5), nếu không chỉ mục nào có ràng buộc thưa thớt hoặc duy nhất, thì bạn có thể xóa chỉ mục trên tiền tố (ví dụ:

db.events.find().sort( { username: -1, date: 1 } )

5). MongoDB sẽ sử dụng chỉ số hợp chất trong tất cả các tình huống mà nó sẽ sử dụng chỉ số tiền tố.

Bắt đầu từ phiên bản 2.6, MongoDB có thể sử dụng giao lộ chỉ mục để thực hiện các truy vấn. Sự lựa chọn giữa việc tạo các chỉ mục hợp chất hỗ trợ các truy vấn của bạn hoặc dựa vào giao điểm chỉ mục phụ thuộc vào các chi tiết cụ thể của hệ thống của bạn. Xem Index Intersection và các chỉ số hợp chất để biết thêm chi tiết.

Các ứng dụng có thể gặp phải hiệu suất giảm trong quá trình xây dựng chỉ mục, bao gồm truy cập đọc/ghi hạn chế vào bộ sưu tập. Để biết thêm thông tin về quy trình xây dựng chỉ mục, hãy xem các bản dựng chỉ mục trên các bộ sưu tập đông dân cư, bao gồm các bản dựng chỉ mục trong phần môi trường được sao chép.

Một số trình điều khiển có thể chỉ định các chỉ mục, sử dụng

db.events.find().sort( { username: -1, date: 1 } )

7 thay vì 1 làm đặc điểm kỹ thuật. Điều này không có bất kỳ ảnh hưởng đến chỉ số kết quả.

Chỉ số nào được sử dụng cho nhiều trường trong MongoDB?

MongoDB cũng hỗ trợ các chỉ mục do người dùng xác định trên nhiều trường, tức là các chỉ mục ghép. Thứ tự của các trường được liệt kê trong một chỉ số ghép có ý nghĩa. Ví dụ, nếu một chỉ mục hợp chất bao gồm {userID: 1, điểm: -1}, chỉ mục sẽ sắp xếp đầu tiên theo userID và sau đó, trong mỗi giá trị userID, sắp xếp theo điểm số.compound indexes. The order of fields listed in a compound index has significance. For instance, if a compound index consists of { userid: 1, score: -1 } , the index sorts first by userid and then, within each userid value, sorts by score .

MongoDB có chỉ số tất cả các trường không?

MongoDB cung cấp hỗ trợ hoàn toàn cho các chỉ mục trên bất kỳ lĩnh vực nào trong bộ sưu tập các tài liệu.Theo mặc định, tất cả các bộ sưu tập có một chỉ mục trên trường _ID và các ứng dụng và người dùng có thể thêm các chỉ mục bổ sung để hỗ trợ các truy vấn và hoạt động quan trọng.Tài liệu này mô tả các chỉ mục tăng dần/giảm dần trên một trường.. By default, all collections have an index on the _id field, and applications and users may add additional indexes to support important queries and operations. This document describes ascending/descending indexes on a single field.

Chúng ta có thể tạo nhiều chỉ mục trong MongoDB không?

Để xây dựng nhiều chỉ mục cùng một lúc, bạn cần sử dụng created Indexes () và chuyển nhiều khóa vào một mảng.use createIndexes() and pass multiple keys into an array.

Làm thế nào để bạn tạo một chỉ mục trên một trường trong MongoDB?

Các chỉ mục có thể được tạo bằng cách sử dụng phương thức createdIndex.Các chỉ mục có thể được tạo trên chỉ một trường hoặc nhiều giá trị trường.Các chỉ mục có thể được tìm thấy bằng cách sử dụng phương thức GetIndexes.Các chỉ mục có thể được loại bỏ bằng cách sử dụng Dropindex cho các chỉ mục đơn hoặc các Dropindex để giảm tất cả các chỉ mục.by using the createIndex method. Indexes can be created on just one field or multiple field values. Indexes can be found by using the getIndexes method. Indexes can be removed by using the dropIndex for single indexes or dropIndexes for dropping all indexes.