Anti-pattern: Array yang Tumbuh Tanpa Batas

Menyimpan seluruh riwayat di dalam array dokumen induk terasa praktis di awal, lalu perlahan menghancurkan performa. Setiap pembacaan dokumen ikut memuat seluruh array meski kamu hanya butuh nama pengguna, dan setiap penambahan memaksa dokumen dipindahkan saat ukurannya membengkak. Batas 16 MB per dokumen akan tercapai pada pengguna paling aktif — biasanya justru pelanggan terpentingmu. Solusi bakunya: simpan riwayat di koleksi terpisah, dan kalau memang perlu di dokumen induk, batasi jumlahnya dengan operator $slice sehingga hanya beberapa terbaru yang disimpan.

👀 Contoh dulu

// simpan hanya 5 aktivitas terbaru di dokumen induk
db.user.updateOne(
  { _id: userId },
  { $push: { aktivitas: { $each: [baru], $slice: -5 } } }
);

Hasilnya: { matchedCount: 1, modifiedCount: 1 }

📝 Sekarang giliranmu

Batasi array notifikasi pada dokumen user agar hanya menyimpan 10 item terbaru. Tulis perintah updateOne yang menambahkan pesanBaru memakai $push dengan $each dan $slice: -10.

Preview