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

MongoDB $tarik

Di MongoDB, Anda dapat menggunakan $pull operator untuk menghapus nilai dari array.

Gunakan $pull dalam hubungannya dengan metode seperti update() untuk memperbarui dokumen yang ditentukan dengan perubahan.

Contoh

Misalkan kita memiliki koleksi yang disebut products dengan dokumen sebagai berikut:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

Kami dapat menghapus elemen dari array di dokumen 1 seperti ini:

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)

Keluaran:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Pesan itu memberi tahu kita bahwa satu dokumen cocok dan satu (yaitu dokumen yang sama) telah dimodifikasi.

Yuk intip koleksinya sekarang:

db.products.find()

Hasil:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

Kita dapat melihat bahwa array pada dokumen 1 memiliki nilai XXL dihapus seperti yang ditentukan.

Hapus Beberapa Nilai

Kita dapat menggunakan $in operator untuk menentukan beberapa nilai yang ingin kita hapus dari larik.

Contoh:

db.products.update( 
  { _id: 3 }, 
  { $pull: { sizes: { $in: ["XS", "XL"] } } } 
)

Keluaran:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Sekarang mari kita periksa kembali koleksinya:

db.products.find()

Hasil:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

Kita dapat melihat bahwa dua elemen yang ditentukan telah dihapus dari array di dokumen 3.

Perbarui Semua Dokumen

Anda dapat menambahkan multi: true atau gunakan updateMany() metode untuk memperbarui semua dokumen yang sesuai dengan kriteria.

Saat Anda melakukan ini, hapus kriteria pemilihan apa pun dari dokumen kueri pertama (yang menentukan dokumen mana yang akan diperbarui). Dengan kata lain, gunakan dokumen kosong sebagai argumen pertama ke update() (atau updateMany() ) metode.

Contoh:

db.products.update( 
  { }, 
  { $pull: { sizes: "XL" } },
  { multi: true }
)

Keluaran:

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 2 })

Dalam hal ini, kita dapat melihat bahwa tiga dokumen cocok (karena ada tiga dokumen dalam koleksi), tetapi hanya dua yang dimodifikasi (karena hanya dua yang memiliki nilai XL dalam sizes susunan).

Dan periksa kembali koleksinya:

db.products.find()

Hasil:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

Kita dapat melihat bahwa semua instance XL telah dihapus dari semua dokumen dalam koleksi.

Array Dokumen

Jika Anda memiliki larik yang berisi dokumen sebagai elemennya, Anda dapat menghapus salah satu dokumen tersebut dengan menentukan kriteria yang cocok dengan data di dalam dokumen.

Misalkan kita memiliki koleksi yang disebut restoran yang dokumen-dokumen berikut:

{
	"_id" : 1,
	"name" : "The Rat",
	"reviews" : [
		{
			"name" : "Stanley",
			"date" : "04 December, 2020",
			"ordered" : "Dinner",
			"rating" : 1
		},
		{
			"name" : "Tom",
			"date" : "04 October, 2020",
			"ordered" : "Lunch",
			"rating" : 2
		}
	]
}
{
	"_id" : 2,
	"name" : "Yum Palace",
	"reviews" : [
		{
			"name" : "Stacey",
			"date" : "08 December, 2020",
			"ordered" : "Lunch",
			"rating" : 3
		},
		{
			"name" : "Tom",
			"date" : "08 October, 2020",
			"ordered" : "Breakfast",
			"rating" : 4
		}
	]
}
{
	"_id" : 3,
	"name" : "Boardwalk Cafe",
	"reviews" : [
		{
			"name" : "Steve",
			"date" : "20 December, 2020",
			"ordered" : "Breakfast",
			"rating" : 5
		},
		{
			"name" : "Lisa",
			"date" : "25 October, 2020",
			"ordered" : "Dinner",
			"rating" : 5
		},
		{
			"name" : "Kim",
			"date" : "21 October, 2020",
			"ordered" : "Dinner",
			"rating" : 5
		}
	]
}

Dalam hal ini, bidang yang disebut reviews berisi kumpulan dokumen. Setiap dokumen review berbeda dari restoran yang bersangkutan.

Kita bisa menggunakan $pull untuk menghapus ulasan yang cocok dengan kriteria tertentu.

Contoh:

db.restaurants.update(
  { },
  { $pull: { reviews: { rating: { $lt: 4 } } } },
  { multi: true }
)

Keluaran:

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 2 })

Pesan ini memberi tahu kami bahwa tiga dokumen cocok dengan kriteria kueri (karena kami memilih semua dokumen), dan dua dokumen telah dimodifikasi (karena dua cocok dengan $pull kami kriteria).

Yuk cek lagi koleksinya untuk melihat efeknya:

db.restaurants.find().pretty()

Hasil:

{ "_id" : 1, "name" : "The Rat", "reviews" : [ ] }
{
	"_id" : 2,
	"name" : "Yum Palace",
	"reviews" : [
		{
			"name" : "Tom",
			"date" : "08 October, 2020",
			"ordered" : "Breakfast",
			"rating" : 4
		}
	]
}
{
	"_id" : 3,
	"name" : "Boardwalk Cafe",
	"reviews" : [
		{
			"name" : "Steve",
			"date" : "20 December, 2020",
			"ordered" : "Breakfast",
			"rating" : 5
		},
		{
			"name" : "Lisa",
			"date" : "25 October, 2020",
			"ordered" : "Dinner",
			"rating" : 5
		},
		{
			"name" : "Kim",
			"date" : "21 October, 2020",
			"ordered" : "Dinner",
			"rating" : 5
		}
	]
}

Kita dapat melihat bahwa hanya ulasan dengan peringkat 4 ke atas yang tersisa. Semua ulasan kurang dari 4 telah dihapus.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB dan C#:Pencarian case-insensitive

  2. 3 Cara Mengonversi String ke Tanggal di MongoDB

  3. Dapatkan subset array di mongodb menggunakan sumber array

  4. Cara menganalisis penggunaan disk dari wadah Docker

  5. Diberikan daftar id, apa cara terbaik untuk menanyakan id mana yang tidak ada dalam koleksi?