MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mongo DB:Bagaimana cara menyalin Dokumen dari satu koleksi dan menambahkannya sebagai bidang ke dokumen terkait dari koleksi lain?

Mulai dari MongoDB 4.4, $merge dapat menampilkan koleksi yang sama yang sedang dikumpulkan:

db.products.aggregate([       
   { /**
    * from: The target collection.
    * localField: The local join field.
    * foreignField: The target join field.
    * as: The name for the results.
    * pipeline: The pipeline to run on the joined collection.
    * let: Optional variables to use in the pipeline field stages.
    */
   $lookup: {
     from: 'events',
     localField: '_id',
     foreignField: 'product_id',
     as: 'events'
   }},
   {/**
    * into: The target collection.
    * on: Fields to  identify.
    * whenMatched: Action for matching docs.
    * whenNotMatched: Action for non-matching docs.
    */
   $merge: {
     into: 'products',
     on: "_id",
     whenMatched: 'merge',
     whenNotMatched: 'insert'
   }}
])

Berhati-hatilah: ketika $merge menghasilkan ke koleksi yang sama yang sedang dikumpulkan, dokumen mungkin diperbarui beberapa kali atau operasi dapat menghasilkan loop tak terbatas. Detail selengkapnya di sini https://docs .mongodb.com/manual/reference/operator/aggregation/merge/#merge-behavior-same-collection

Jika ini adalah pembaruan satu kali, Anda dapat mengamankan saluran dengan menambahkan filter awal sebagai tahap pertama untuk memastikan dokumen diperbarui tepat satu kali:

{ $match: { events: { $exists: false } }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongo export SyntaxError:missing; sebelum pernyataan @(kulit)::1:14

  2. Temukan catatan dari 7 hari yang lalu mulai sekarang di MongoDB

  3. Bisakah saya menggunakan MongoDB sebagai pengganti CoreData di iOS?

  4. Kesalahan:Tidak dapat terhubung ke server mana pun di klaster MongoDB Atlas Anda

  5. Apakah ada alat yang setara seperti profiler sql untuk mongodb?