Bidang salin mongodb dari satu koleksi ke koleksi lainnya

Di MongoDB, metode copyTo () digunakan untuk menyalin semua dokumen dari satu koleksi (Koleksi sumber) ke koleksi lain (Koleksi target) menggunakan JavaScript sisi server dan jika koleksi lain (Koleksi target) tidak ada maka MongoDB membuat yang baru . Metode ini menggunakan perintah eval secara internal.     

Catatan penting. Karena CopyTo() menggunakan eval() secara internal & eval() tidak digunakan lagi sejak versi 3. 0, jadi CopyTo() juga tidak digunakan lagi sejak versi 3. 0

Sintaksis

db. sourceCollection. copyTo(targetCollection)

Parameter

Hanya dibutuhkan nama koleksi target tempat Anda ingin menyalin dokumen koleksi sumber. Jenis parameter ini adalah string

Kembali.  

Metode ini mengembalikan jumlah dokumen yang disalin dan jika proses itu gagal, pengecualian akan muncul

Contoh 1. Dalam contoh berikut, kami bekerja dengan

Basis data. gfg

Koleksi. koleksi dan koleksi

CollectionA berisi tiga dokumen

Bidang salin mongodb dari satu koleksi ke koleksi lainnya

CollectionB berisi dua dokumen

Bidang salin mongodb dari satu koleksi ke koleksi lainnya

Sekarang kita salin dokumen koleksi ke koleksi menggunakan metode copyTo()

db.collectionA.copyTo("collectionB")

Bidang salin mongodb dari satu koleksi ke koleksi lainnya

Contoh 2. Dalam contoh berikut, kami bekerja dengan

Basis data. gfg

Koleksi. Koleksi

Dokumen. Tiga dokumen berisi nama dan umur siswa

Bidang salin mongodb dari satu koleksi ke koleksi lainnya

Sekarang kita akan menyalin dokumen sCollection ke koleksi baru i. e. , tCollection menggunakan metode copyTo(). Di sini, tCollection tidak ada di database GFG sehingga MongoDB membuat koleksi ini

Mohon koreksi jika pemahaman saya salah. Anda mencoba menyalin data dari satu koleksi Cosmos Db ke koleksi DB kosmos lainnya dan Anda ingin mengubah dan menyisipkan bidang baru ke database sink Anda

Anda dapat menggunakan kolom turunan dalam aliran data Anda untuk mencapainya. Silakan lihat tangkapan layar di bawah ini untuk referensi Anda

Penjelasan singkat tentang cara menambah atau memperbarui bidang dalam dokumen yang mereferensikan nilai bidang lain yang sudah ada dengan memanfaatkan kerangka pipa agregasi

Daftar isi

Situasi dokumen awal

Misalkan Anda memiliki dokumen berikut dengan nilai suhu per jam dalam kumpulan yang disebut temperatures

[
  {
    _id: ObjectId("62508bd0742bfb98b29dbe71"),
    date: ISODate("2022-04-08T08:00:00.000Z"),
    tempC: 7.3
  },
  {
    _id: ObjectId("62508bf0742bfb98b29dbe8c"),
    date: ISODate("2022-04-08T09:00:00.000Z"),
    tempC: 7.8
  },
  {
    _id: ObjectId("62508c02742bfb98b29dbe93"),
    date: ISODate("2022-04-08T10:00:00.000Z"),
    tempC: 8.5
  }
]
_

Suhu yang diberikan di bidang tempC adalah dalam derajat Celcius tetapi Anda mungkin juga memerlukan suhu dalam derajat Fahrenheit. Untuk berbagai alasan, masuk akal untuk mempertahankan nilai Fahrenheit di MongoDB alih-alih menghitungnya selalu dengan cepat di aplikasi Anda

Jadi, Anda ingin menambahkan bidang tempF_ ke setiap dokumen yang memuat suhu dalam Fahrenheit. Rumus perhitungan untuk itu akan mudah. tempF = tempC * 1.8 + 32. Tetapi bagaimana cara mencapainya di MongoDB?

Peringatan dengan operator pembaruan umum

Mencoba menyelesaikan tugas yang muncul sederhana ini dengan fungsi dasar MongoDB, Anda akan segera menghadapi masalah berikut

  • Operator $set yang digunakan untuk menambahkan kolom baru atau memperbarui kolom yang sudah ada tidak dapat digunakan bersama dengan ekspresi. Hanya membutuhkan nilai biasa, jadi tidak mungkin merujuk bidang lain
  • Operator pembaruan MongoDB tradisional seperti $mul dan $inc yang diperlukan di sini untuk menghitung tempF tidak cukup. Ini karena mereka hanya dibuat untuk mengubah bidang yang ada sejalan dengan nilai tetap, mis. g. "tambahkan 10 ke bidang" atau "kalikan bidang dengan 2"

Jadi apa cara menggunakan MongoDB untuk menambahkan bidang baru atau memperbaruinya ketika nilai yang dihasilkan mereferensikan bidang lain yang sudah ada?

Memperbarui dokumen menggunakan pipeline agregasi

Dimulai dengan MongoDB 4. 2, dimungkinkan untuk menggunakan pipa agregasi yang kuat dengan pembaruan. Ini memungkinkan penggunaan operator pipa agregasi dalam pernyataan pembaruan normal. Operator ini lebih fleksibel daripada operator tradisional dan memungkinkan ekspresi mereferensi bidang lain dengan menggunakan notasi

Dengan mengingat hal ini, kita sekarang dapat menambahkan bidang yang diperlukan menggunakan tahap pipa agregasi

db.temperatures.updateMany(
  {},
  [{ $set: { tempF: { $add: [ { $multiply: ['$tempC', 1.8] }, 32] } } }]
);
0 menggunakan
db.temperatures.updateMany(
  {},
  [{ $set: { tempF: { $add: [ { $multiply: ['$tempC', 1.8] }, 32] } } }]
);
1 dan
db.temperatures.updateMany(
  {},
  [{ $set: { tempF: { $add: [ { $multiply: ['$tempC', 1.8] }, 32] } } }]
);
2 sebagai berikut…

db.temperatures.updateMany(
  {},
  [{ $set: { tempF: { $add: [ { $multiply: ['$tempC', 1.8] }, 32] } } }]
);

Bidang baru tempF sekarang ditambahkan ke setiap dokumen berdasarkan bidang tempC yang sudah ada…

[
  {
    _id: ObjectId("62508bd0742bfb98b29dbe71"),
    date: ISODate("2022-04-08T08:00:00.000Z"),
    tempC: 7.3,
    tempF: 45.14
  },
  {
    _id: ObjectId("62508bf0742bfb98b29dbe8c"),
    date: ISODate("2022-04-08T09:00:00.000Z"),
    tempC: 7.8,
    tempF: 46.04
  },
  {
    _id: ObjectId("62508c02742bfb98b29dbe93"),
    date: ISODate("2022-04-08T10:00:00.000Z"),
    tempC: 8.5,
    tempF: 47.3
  }
]
_

Catatan. Karena operator agregasi $set akan menimpa nilai bidang yang ditentukan jika sudah ada dalam dokumen, pendekatan ini juga berfungsi sempurna untuk memperbarui bidang

Bagaimana cara menyalin data dari satu koleksi ke koleksi lainnya di MongoDB?

Dalam MongoDB, metode copyTo() digunakan untuk menyalin semua dokumen dari satu koleksi(Koleksi sumber) ke koleksi lain(Koleksi target .

Bagaimana cara menyalin dan menempelkan koleksi di MongoDB?

Tempel koleksi MongoDB . Dalam contoh kami, itu adalah "pengujian" basis data di server "ADX". Klik kanan target Anda dan pilih Tempel Koleksi .

Bagaimana cara memperbarui nilai bidang di MongoDB?

Shell MongoDB menyediakan metode berikut untuk memperbarui dokumen dalam koleksi. .
Untuk memperbarui satu dokumen, gunakan db. koleksi. perbaruiSatu()
Untuk memperbarui banyak dokumen, gunakan db. koleksi. updateBanyak()
Untuk mengganti dokumen, gunakan db. koleksi. gantiSatu()

Bagaimana cara memilih data dari satu tabel dan memasukkan ke yang lain di MongoDB?

Cara MEMILIH data dari satu Tabel dan INSERT ke Tabel Lain di MongoDB .
Koleksi barang. [ { _Indo. ObjectId("123abc"), itemNumber. 123456 }, { _id. ObjectId("321cba"), itemNumber. 654321 }, ].
Koleksi daftar. [ { _Indo. ObjectId("456def"), item. ["123abc","321cba"] } ].
router