2013-10-12 22 views
5

Làm cách nào để sao chép một bộ sưu tập bằng MongoDB và bỏ qua các khóa trùng lặp?db.cloneCollection bỏ qua các khóa trùng lặp

$ mongo items 
MongoDB shell version: 2.4.6 
connecting to: items 
> db.cloneCollection('localhost:27018', 'things') 
{ 
    "errmsg" : "exception: E11000 duplicate key error index: items.things.$_id_ dup key: { : ObjectId('52558bebdedc25038ed26d58') }", 
    "code" : 11000, 
    "ok" : 0 
} 

Tốt hơn, có cách nào hợp nhất bộ sưu tập từ xa với bộ sưu tập cục bộ? Nếu db.cloneCollection bị gián đoạn, dường như không có cách nào để "tiếp tục" nó mà không xóa tất cả các mục trùng lặp và khởi động lại từ đầu.

Trả lời

0

Bạn có thể tạo một bộ sưu tập khác có tên là "things2" và sao chép ở đó bộ sưu tập từ xa. Sau đó, sử dụng chèn hàng loạt không theo thứ tự vào bộ sưu tập "mọi thứ" cho mỗi tài liệu của bộ sưu tập "things2" - nó sẽ bỏ qua các lỗi khóa trùng lặp cho đến khi chèn toàn bộ số lượng lớn được thực hiện.

db.cloneCollection('localhost:27018', 'things2'); 
 

 
var cursor = db.things2.find(); null; 
 

 
var bulk = db.things.initializeUnorderedBulkOp(); 
 

 

 
cursor.forEach(function(doc) { 
 
    bulk.insert(doc); 
 
}); 
 

 
bulk.execute();

hoặc bạn có thể tạo một mảng với tất cả các tài liệu từ "things2" thu thập và sau đó "chèn" nó vào bộ sưu tập "những điều" với các tùy chọn {lệnh: false}

db.cloneCollection('localhost:27018', 'things_2'); 
 

 
var things2array = db.things2.find().toArray(); null; 
 

 
db.things.insert(things2array,{ ordered : false });

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