Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Lưu kết quả truy vấn vào database tạm trong MongoDB

Sử dụng forEach() trên cursor để lặp qua kết quả và insert() vào collection khác (database tạm hoặc collection tạm).

Tạo collection nguồn:

> db.demo43.insertOne({"StudentName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e25d4b3cfb11e5c34d898e5") }
> db.demo43.insertOne({"StudentName":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e25d4b8cfb11e5c34d898e6") }
> db.demo43.insertOne({"StudentName":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e25d4bbcfb11e5c34d898e7") }

Xem dữ liệu nguồn:

> db.demo43.find();

Sao chép sang collection demo44 (database tạm):

> db.demo43.find().forEach(function(myDocument) { db.demo44.insert(myDocument); })

Kiểm tra collection đích:

> db.demo44.find();

Lưu ý:

  • forEach chạy ở **client-side** (mongo shell), kéo dữ liệu về rồi insert lại → chậm với dữ liệu lớn
  • _id được giữ nguyên (có thể trùng nếu insert vào cùng collection)
  • Cách hiệu quả hơn (server-side): db.demo43.aggregate([{$out: "demo44"}]) hoặc $merge (MongoDB 4.2+)
  • Database "tạm" thường dùng prefix tmp_ hoặc TTL index để tự xóa