Di MongoDB, operator $push digunakan untuk menambahkan nilai tertentu ke array. Jika bidang yang disebutkan tidak ada dalam dokumen yang akan diperbarui, operator $push menambahkannya sebagai bidang baru dan menyertakan nilai yang disebutkan sebagai elemennya. Jika bidang pemutakhiran bukan bidang jenis larik, operasi gagal
Pada saat memperbarui jika nilai itu sendiri adalah sebuah larik, operator $push menambahkan seluruh larik sebagai elemen tunggal
Jika Anda ingin menambahkan setiap elemen dari nilai secara terpisah, operator $push dapat digunakan dengan pengubah $each
Sintaksis
db.collection.update( <query>,{ $push: { <field>: <value> } })Parameter
NamaKeteranganbidangnama kolom atau bidang ke dokumen. nilai. Ini adalah nilai yang akan ditentukan untuk bidang atau kolom. kueriKueri dapat berupa ekspresi atau kondisi atau kriteria
Koleksi sampel "siswa"
{ "_id" : 1, "sem" : 1, "subjects" : [ "phys", "chem", "maths", "gkn", "stat", "astro" ], "achieve" : [ 70, 87, 90, 90, 65, 81 ] } _Contoh operator $push MongoDB
Jika kita ingin menambahkan 95 ke bidang array yang dicapai dengan kondisi subjek adalah "gkn", perintah mongodb berikut dapat digunakan -
> db.student.update( { "subjects" : "gkn" },{ $push: { "achieve": 95 } });Di sini, dalam contoh di atas $each pengubah telah digunakan untuk menambahkan beberapa elemen 77,49,83 ke array reach yang cocok dengan kondisi subject sama dengan "gkn"
Untuk memperbarui objek di dalam array bersarang di MongoDB Anda dapat menggunakan pendekatan ini, Ini telah teruji dengan baik dan berfungsi
Kasus
Perbarui objek array bersarang. Lihat gambar di bawah untuk Ide yang lebih baik tentang apa yang akan kita lakukan. Kami akan memperbarui objek yang bersarang dengan 3 level array
{ discussionList[ discussionList [ { object-value-to-be-updated. } ] ] }
Masuk ke mode layar penuh Keluar dari mode layar penuh
Larutan
public courseCategoryPostCommentReplyUpdate(operation: CommentReplyUpdateMutation): Promise<IDocumentUpdateType> { return this.courseCategoryPostCommentsModel.updateOne( { "postId" : operation.postId, 'discussionList': { '$elemMatch': { '_id': operation.commentId, "discussionList._id": operation.replyId } } }, { $set: { "discussionList.$[outer].discussionList.$[inner].payload": operation.payload, "discussionList.$[outer].discussionList.$[inner].isUpdated": true, "discussionList.$[outer].discussionList.$[inner].commentUpdateTime": new Date() } }, { arrayFilters: [ { "outer._id": operation.commentId}, {"inner._id": operation.replyId} ] } ); } _
Masuk ke mode layar penuh Keluar dari mode layar penuh
FootNotes - kode ini untuk memperbarui balasan komentar
Begitulah cara Anda dapat melakukan operasi pada objek dalam array bersarang dalam dokumen mongoDB. Anda juga dapat memperbarui/menghapus objek yang memiliki tingkat lebih bersarang hanya dengan memodifikasi kueri
Contoh hapus dan dapatkan
Menghapus// Informational Note: // Delete nested array values in mongodb public courseCategoryPostCommentReplyDelete(operation: CommentReplyDeleteMutation): Promise<IDocumentUpdateType> { return this.courseCategoryPostCommentsModel.updateOne( { 'postId': operation.postId, 'discussionList': { '$elemMatch': { '_id': operation.commentId, 'discussionList._id': operation.replyId } } }, { $pull: { 'discussionList.$[outer].discussionList': { user: operation.userId, _id: operation.replyId } } }, { arrayFilters: [ { 'outer._id': operation.commentId } ], multi: false } ); } }
Masuk ke mode layar penuh Keluar dari mode layar penuh
DAPATKAN
public courseCategoryPostCommentRead(postId: string): Promise<IComment> { return this.courseCategoryPostCommentsModel.findOne<IComment>({ postId: postId }).populate('discussionList.user').populate('discussionList.discussionList.user').exec(); } _
Masuk ke mode layar penuh Keluar dari mode layar penuh
Saya menggunakan GraphQL. Anda mungkin perlu mengulangi hasilnya dan menunjukkan komentar/balasan sesuai itu