MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Bộ sưu tập bản sao Mongo và Quyền của người dùng

Theo collection.copyTo() trong MongoDB 2.4, trình trợ giúp trình bao này "sao chép tất cả tài liệu từ bộ sưu tập vào newCollection bằng JavaScript phía máy chủ".

Tôi cho rằng lý do bạn nhận được unauthorized lỗi là do db.eval() lệnh yêu cầu toàn quyền quản trị viên trong MongoDB 2.4 (nhiều vai trò trên admin cơ sở dữ liệu).

Bạn thực sự có thể thấy nguồn của trình trợ giúp này trong mongo shell nếu bạn gọi copyTo() không có () :

> db.test.copyTo
function ( newName ){
    return this.getDB().eval(
        function( collName , newName ){
            var from = db[collName];
            var to = db[newName];
            to.ensureIndex( { _id : 1 } );
            var count = 0;

            var cursor = from.find();
            while ( cursor.hasNext() ){
                var o = cursor.next();
                count++;
                to.save( o );
            }

            return count;
        } , this.getName() , newName
    );
}

Do việc sử dụng db.eval() phía máy chủ , có một số cảnh báo quan trọng trên copyTo() việc sử dụng bao gồm các cảnh báo về độ trung thực của loại và các vấn đề về khóa. Tôi tin rằng trình trợ giúp này chỉ nhằm mục đích sử dụng trong môi trường phát triển với nhiều quyền mở hơn, thay vì môi trường sản xuất.

Bản sao tự làm từ mongo vỏ

Đó không phải là một lựa chọn hoàn toàn điên rồ :). Đây là một lớp lót đơn giản cho mongo shell (thay thế sourcetarget bộ sưu tập nếu thích hợp):

db.source.find().forEach( function(d) {db.target.insert(d)});

Nếu bạn lo lắng về băng thông mạng, bạn có thể chạy nó từ mongo shell cục bộ với máy chủ MongoDB của bạn.

Sao chép bằng mongodump / mongorestore

Một cách tiếp cận tốt hơn để sao chép một bộ sưu tập (mặc dù không phải trực tiếp từ mongo shell) sẽ sử dụng mongodump &mongorestore :

$ mongodump -d test -c source 
$ mongorestore -d test -c target dump/test/source.bson                                                                                                                                            



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cấu trúc cơ sở dữ liệu MongoDB và Trợ giúp về các phương pháp hay nhất

  2. MongoDB - Lỗi:tài liệu phải có _id trước khi lưu

  3. MongoDB $ hàng tuầnUpdate # 66 (ngày 22 tháng 4 năm 2022):Hackathons, mongosh và Github

  4. Mongo Truy vấn một trường lồng nhau trong một mảng.

  5. Cách sắp xếp tài liệu dựa trên độ dài của trường Mảng