2012-09-15 42 views
6

Tôi có một bộ sưu tập mà tôi không cần bất kỳ chỉ mục nào. Tôi chỉ lưu trữ thời hạn và ngày tìm kiếm của người dùng, do đó, bộ sưu tập của tôi thực sự đơn giản.Tôi có thể xóa chỉ mục MongoDB mặc định không?

class UserSearch { 

public string Term {get; set;} 
pulic DateTime Date {get;set;} 

} 

Khi tôi lưu trữ một mục UserSearch, bộ sưu tập của tôi có _id và chỉ mục mặc định trên đó.

Từ kiến ​​thức của tôi, các trường "_id" sẽ được lập chỉ mục trong ram, vì vậy tôi không muốn chi tiêu bộ nhớ ram cho bộ sưu tập mà tôi vừa lưu trữ và tôi tính toán 12 giờ một lần.

Tôi cố xóa nó nhưng không thể.

var indexes = UserSearch(true).GetIndexes(); 

    //delete UserSearch Default Index 
    if(UserSearch(true).IndexExistsByName("_id_")) 
    { 
    UserSearch(true).DropIndexByName("_id_"); 
    } 

Bất kỳ đề xuất/giải pháp nào?

Trả lời

12

Không, bạn không thể xóa.

Từ MongoDB documentation, nhấn mạnh mỏ;

Các _id Index

Đối với tất cả các bộ sưu tập trừ các bộ sưu tập mũ, một chỉ số được tự động tạo cho lĩnh vực _id. Chỉ mục này đặc biệt và không thể bị xóa. Chỉ số _id thực thi tính duy nhất cho các khóa của nó (ngoại trừ một số trường hợp có sự cố).

1

Bạn không thể xóa chỉ mục _id sau khi được tạo. Tuy nhiên, bạn có thể tạo bộ sưu tập không có chỉ mục _id bằng cách đặt tùy chọn autoIndexId thành false bằng cách sử dụng db.createCollection nhưng không có _id bạn không thể sao chép bộ sưu tập của mình.

+0

Thực ra bạn không cần _id để nhân bản hoặc sharding. Bạn có thể đặt bất kỳ chỉ mục hoặc chỉ mục hợp chất nào khác. –

+1

@AdrianLopez Vui lòng lưu ý Cảnh báo: 'QUAN TRỌNG Đối với các bản sao, không đặt autoIndexId thành false.' https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection –

+0

Tôi đã đề cập đến điểm đó trong câu trả lời của mình @KevinJohnson – styvane

Các vấn đề liên quan