Di MongoDB db.collection.findOneAndDelete()
metode menghapus satu dokumen, dan mengembalikan dokumen yang dihapus.
Ini menghapus dokumen pertama yang cocok dalam koleksi yang cocok dengan filter
. sort
parameter dapat digunakan untuk mempengaruhi dokumen mana yang dihapus.
collection
bagian adalah nama koleksi yang digunakan untuk menghapus dokumen.
Contoh
Misalkan kita memiliki koleksi yang disebut pets
yang berisi dokumen-dokumen berikut:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } } { "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Kita dapat menggunakan db.collection.findOneAndDelete()
metode untuk menghapus salah satu dokumen tersebut.
db.pets.findOneAndDelete(
{ "type": "Cat" }
)
Hasil:
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
Dalam hal ini saya menggunakan kueri untuk mempersempitnya menjadi hanya kucing. Hanya satu kucing yang dihapus, padahal koleksinya ada dua.
Yuk cek koleksinya.
db.pets.find()
Hasil:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } } { "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Kita dapat melihat bahwa kucing pertama (dokumen 3) telah dihapus.
Dokumen Tersemat
Jika Anda memiliki dokumen yang berisi dokumen yang disematkan, Anda dapat menggunakan metode berikut untuk melakukan kueri data dalam dokumen yang disematkan.
- Notasi titik (mis.
field.nestedfield: <value>
) - Formulir bertingkat (mis. {
field: { nestedfield: <value> } }
). Perhatikan bahwa opsi ini hanya tersedia dari MongoDB 4.4.
Berikut adalah contoh yang menggunakan notasi titik untuk membuat kueri dalam dokumen yang disematkan.
db.pets.findOneAndDelete({ "specs.height": 400 })
Hasil:
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
Seperti yang diharapkan, dokumen 6 telah dihapus.
Kueri berikut menghapus dokumen yang sama, tetapi dalam kasus ini menggunakan formulir bersarang untuk merujuk ke dokumen yang disematkan.
db.pets.findOneAndDelete({
"specs" : {
"height" : 400,
"weight" : 15,
"color" : "brown"
}
})
Saat menggunakan formulir bersarang, kueri harus sama persis dengan seluruh dokumen yang disematkan. Misalnya, kueri berikut tidak cocok:
db.pets.findOneAndDelete({
"specs" : {
"height" : 400
}
})
Hasil:
null
Array
Anda dapat mereferensikan data dalam array dengan mereferensikan elemen array berdasarkan indeks atau nilainya.
Jika kami ingin menghapus semua anjing dengan penghargaan Top Dog, kami dapat menulis kueri berikut (yang akan mengembalikan anjing di atas).
db.pets.findOneAndDelete({
"awards": "Top Dog"
})
Hasil:
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Anda juga dapat menentukan indeks elemen, seperti ini:
db.pets.findOneAndDelete({
"awards.0": "Top Dog"
})
Melakukan itu mengharuskan nilai yang ditentukan berada pada indeks yang ditentukan. Oleh karena itu, kueri berikut tidak mengembalikan anjing yang sama.
db.pets.findOneAndDelete({
"awards.1": "Top Dog"
})
Perhatikan bahwa array berbasis nol, jadi indeks 0 menentukan elemen pertama, 1 menentukan elemen kedua, dan seterusnya.
sort
Parameter
Anda dapat menggunakan sort
parameter untuk menentukan urutan penyortiran untuk dokumen yang cocok dengan filter
. Ini akan mempengaruhi dokumen mana yang dihapus.
Saat menggunakan sort
parameter, nilai 1
mengurutkan dokumen ke dalam urutan menaik, dan nilai -1
mengurutkannya ke dalam urutan menurun.
Argumen perlu diberikan sebagai dokumen. Misalnya, { sort: { "salary": 1 } }
urutkan berdasarkan salary
bidang dalam urutan menaik.
Misalnya, kita membuat koleksi yang disebut employees
dengan dokumen sebagai berikut:
db.employees.insertMany([
{ _id: 1, name: "Sandy", salary: 55000 },
{ _id: 2, name: "Sarah", salary: 128000 },
{ _id: 3, name: "Fritz", salary: 25000 },
{ _id: 4, name: "Chris", salary: 45000 },
{ _id: 5, name: "Beck", salary: 82000 }
])
Kita dapat menjalankan kode berikut untuk menemukan dokumen dengan gaji kurang dari 60000, lalu menghapus yang terendah dari dokumen tersebut.
db.employees.findOneAndDelete(
{ "salary": { $lt: 60000 } },
{
sort: { "salary": 1 }
}
)
Hasil:
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
Seperti yang diharapkan, karyawan dengan gaji terendah telah dihapus.
Begini tampilan dokumennya sekarang.
db.employees.find()
Hasil:
{ "_id" : 1, "name" : "Sandy", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 4, "name" : "Chris", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
Jadi kita bisa melihat bahwa Fritz telah dihapus.
Mari kita kembalikan ke dokumen aslinya.
db.employees.remove({})
db.employees.insertMany([
{ _id: 1, name: "Sandy", salary: 55000 },
{ _id: 2, name: "Sarah", salary: 128000 },
{ _id: 3, name: "Fritz", salary: 25000 },
{ _id: 4, name: "Chris", salary: 45000 },
{ _id: 5, name: "Beck", salary: 82000 }
])
Sekarang mari kita jalankan findOneAndDelete()
yang sama kode lagi, tapi kali ini kita akan mengurutkannya dalam urutan menurun.
db.employees.findOneAndDelete(
{ "salary": { $lt: 60000 } },
{
sort: { "salary": -1 }
}
)
Hasil:
{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }
Kali ini Sandy dihapus.
Yuk cek lagi koleksinya.
db.employees.find()
Hasil:
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Chris", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
Seperti yang diharapkan, Sandy tidak lagi ada dalam koleksi.
Informasi Lebih Lanjut
db.collection.findOneAndDelete()
metode juga menerima parameter lain, seperti projection
(untuk menentukan subset bidang yang akan dikembalikan), maxTimeMS
, dan collation
.
Lihat dokumentasi MongoDB untuk informasi lebih lanjut.