2013-08-19 39 views

Trả lời

7

Bạn có thể làm rõ ý nghĩa của từ "sao chép/sao chép" không? Bạn đang cố gắng tạo một tài liệu trùng lặp trong cơ sở dữ liệu? Hay bạn chỉ đang cố gắng có hai số var trong chương trình có dữ liệu trùng lặp?

Nếu bạn chỉ làm:

Model.findById(yourid).exec(
    function(err, doc) { 
     var x = doc; 
     Model.findById(yourid).exec(
      function(err, doc2) { 
       var y = doc2; 
       // right now, x.name and y.name are the same 
       x.name = "name_x"; 
       y.name = "name_y"; 
       console.log(x.name); // prints "name_x" 
       console.log(y.name); // prints "name_y" 
      }); 
    }); 

Trong trường hợp này, xy sẽ có hai "bản sao" của cùng một tài liệu trong chương trình của bạn.

Ngoài ra, nếu bạn muốn để chèn một bản sao mới của doc vào cơ sở dữ liệu (mặc dù với một khác nhau _id tôi giả sử), mà sẽ trông như thế này:

Model.findById(yourid).exec(
    function(err, doc) { 
     var d1 = doc; 
     d1._id = /* set a new _id here */; 
     d1.save(callback); 
    } 
); 

Hoặc nếu bạn đang làm điều này ngay từ đầu, hay còn gọi là bạn đã tạo một số tài liệu d1, bạn chỉ có thể gọi save hai lần mà không cần thiết lập các _id:

var d1 = new Model({ name: "John Doe", age: 54 }); 
d1.save(callback); 
d1.save(callback); 

nay sẽ có hai tài liệu với khác nhau _id và tất cả các trường khác giống nhau trong cơ sở dữ liệu của bạn.

Điều này có làm rõ mọi thứ một chút không?

+3

Vâng, thực sự, tôi đã kết thúc nhận được 'doc', loại bỏ' _id' và tiết kiệm :) – fusio

+0

Vui mừng khi nghe nó làm việc ra! – Amalia

+0

Bạn đã xóa _id bằng cách nào? – JoeTidee

44

Các mã sau đây để sao chép tài liệu trong phản ứng của Amelia trên không hoạt động:

Model.findById(yourid).exec(
    function(err, doc) { 
     var d1 = doc; 
     d1._id = /* set a new _id here */; 
     d1.save(callback); 
    } 
); 

Bạn cũng cần phải thiết lập lại d1.isNew = true; như trong:

Model.findById(yourid).exec(
    function(err, doc) { 
     doc._id = mongoose.Types.ObjectId(); 
     doc.isNew = true; //<--------------------IMPORTANT 
     doc.save(callback); 
    } 
); 
+0

cảm ơn doc.isNew :) – victorkurauchi

+0

Đã lưu cuộc sống của tôi (sắp xếp) :) – JoeTidee

+0

Đã lưu một cuộc sống khác bằng doc.isNew. Cảm ơn! – jimmy

0

Các mã sau để sao chép tài liệu:

Model.findById(yourid).exec(
     function(err, doc) { 
      var newdoc = new Model(doc); 
      newdoc ._id = mongoose.Types.ObjectId(); 
      newdoc .save(callback); 
     } 
    ); 
0

Đối với chỉ đơn giản là sao chép sử dụng này:

Context.findOne({ 
    _id: context._id 
}) 
    .then(function(c) { 
     c._id = undefined; 
     c.name = context.name; 
     c.address = context.address; 
     c.created = Date.now(); 
     return Context.create(c.toObject()); 
    }).then(function(c) { 
     return res.json({ 
      success: true, 
      context: context 
     }); 
    }).catch(function(err) { 
     next(err, req, res); 
    }); 
Các vấn đề liên quan