2012-10-22 31 views
8

Tôi cần tạo một số tập lệnh triển khai như di chuyển dữ liệu và đồ đạc cho cơ sở dữ liệu MongoDB và tôi không thể tìm đủ thông tin về cách xóa chỉ mục bằng Mongoose API. Điều này là khá thẳng về phía trước khi sử dụng API MongoDB chính thức:Cách được khuyến nghị để giảm chỉ mục bằng Mongoose là gì?

Để xóa tất cả các chỉ số về thu quy định:

db.collection.dropIndexes();

Tuy nhiên, tôi muốn sử dụng Mongoose cho điều này và tôi đã cố sử dụng executeDbCommand được điều chỉnh từ this post, nhưng không thành công:

mongoose.connection.db.executeDbCommand({ dropIndexes: collectionName, index: '*' }, 
    function(err, result) { /* ... */ }); 

Tôi có nên sử dụng ial MongoDB API cho Node.js hoặc tôi chỉ bỏ lỡ một cái gì đó trong cách tiếp cận này?

+0

Bạn có gặp lỗi khi chạy mã executeDbCommand của mình không? Cú pháp của bạn trông hơi lệch, nếu bạn chạy executeDbCommand ({dropIndexes: collectionName, index: '*'}, hàm (err, result) {...}); ? Tôi tin rằng cú pháp chính xác là để có lệnh đầy đủ kèm theo trong dấu ngoặc nhọn, theo sau là hàm. – Louisa

Trả lời

20

Để thực hiện điều này thông qua mô hình Mongoose cho bộ sưu tập, bạn có thể gọi dropAllIndexes của bộ sưu tập có nguồn gốc:

MyModel.collection.dropAllIndexes(function (err, results) { 
    // Handle errors 
}); 

Cập nhật

dropAllIndexes được tán thành trong phiên bản 2.x của trình điều khiển gốc, do đó, hãy sử dụng dropIndexes thay thế:

MyModel.collection.dropIndexes(function (err, results) { 
    // Handle errors 
}); 
1

Dường như bạn đang cố gắng xóa tất cả các chỉ mục trên một tập hợp nhất định.

Theo Tài liệu MongoDB, this is the correct command.

... Tôi cố gắng sử dụng executeDbCommand chuyển thể từ bài này, nhưng không thành công:

Để thực sự giúp ở đây, chúng ta cần biết thêm chi tiết:

  • gì không? Làm cách nào bạn đo lường "không thành công"?
  • Bạn có thể xác nhận 100% lệnh đó đã chạy không? Bạn có xuất ra các bản ghi trong cuộc gọi lại không? Bạn đã kiểm tra biến số err?
  • Bạn tạo chỉ mục ở đâu? Bạn có thể xác nhận rằng bạn không tái tạo chúng sau khi bỏ không?
  • Bạn đã thử lệnh trong khi liệt kê các tên chỉ mục cụ thể chưa? Thành thật mà nói, bạn không nên sử dụng "*". Bạn nên xóa và tạo các chỉ mục rất cụ thể.
+0

Bởi "không thành công" Tôi có nghĩa là mã thực hiện mà không có bất kỳ lỗi nào, nhưng gọi lại được cung cấp bởi tôi chưa bao giờ được gọi. Tôi có vấn đề này trong một kịch bản nhỏ mà chỉ có trách nhiệm là thả và tạo các bộ sưu tập nhất định, bao gồm các chỉ mục liên quan của chúng và điền vào các bộ sưu tập đó với một số dữ liệu cần thiết để thử nghiệm. – npclaudiu

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