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

MongoDB $gantiSemua

$replaceAll operator pipa agregasi diperkenalkan di MongoDB 4.4.

Operator ini mengganti semua contoh string pencarian dalam string input dengan string pengganti dan mengembalikan hasilnya.

Jika string pencarian tidak ditemukan, maka $replaceAll mengembalikan string input.

Contoh

Misalkan kita memiliki koleksi yang disebut products dengan dokumen berikut:

{
	"_id" : 1,
	"product" : "Left Handed Screwdriver with Left Handed Carry Case"
}

Mari gunakan $replaceAll operator untuk mengganti instance pertama dari string Left Handed dengan string lain:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Left handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Hasil:

{
	"_id" : 1,
	"product" : "Ambidextrous Screwdriver with Ambidextrous Carry Case"
}

Perhatikan bahwa kedua contoh string pencarian (Left Handed ) diganti.

Seperti namanya, $replaceAll menggantikan semua kemunculan string pencarian. Untuk mengganti pertama kejadian, gunakan $replaceOne .

Sensitivitas Huruf Besar

$replaceAll operator peka huruf besar/kecil.

Contoh:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Left handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Hasil:

{
	"_id" : 1,
	"product" : "Left Handed Screwdriver with Left Handed Carry Case"
}

Dalam hal ini, saya mengubah kasus karakter tunggal dalam string pencarian saya. Saya mengubah Handed untuk handed . Ini mengakibatkan string pencarian tidak ditemukan dan tidak ada yang diganti. Oleh karena itu, string input dikembalikan.

Sensitivitas Diakritik

$replaceAll operator sensitif terhadap diakritik.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id": 2, "product": "Toupée Tape" }

Dan sekarang mari kita coba mencari dan mengganti kata Toupée , tapi lupa untuk menggunakan aksen yang tajam:

db.products.aggregate([
    { $match: { _id: 2 } },
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Toupee", replacement: "Wig" } }
      }
   }
])

Hasil:

{ "_id" : 2, "product" : "Toupée Tape" }

Tidak ada perubahan.

Saya tidak menyertakan diakritik dalam string pencarian saya sehingga tidak ada yang cocok.

Ini dia lagi, tapi kali ini saya sertakan diakritiknya:

db.products.aggregate([
    { $match: { _id: 2 } },
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Toupée", replacement: "Wig" } }
      }
   }
])

Hasil:

{ "_id" : 2, "product" : "Wig Tape" }

Kali ini string pencarian ditemukan dan diganti.

Ekspresi Null

Jika ada ekspresi yang diberikan ke $replaceAll adalah null , hasilnya null .

Berikut ini contoh pemberian null bidang operator ke $replaceAll :

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: null, replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Hasil:

{ "_id" : 1, "product" : null }
{ "_id" : 2, "product" : null }

Dalam hal ini find bidang operator adalah null dan hasilnya adalah null .

Bidang Tidak Ada

Jika input atau find field operator mengacu pada field yang tidak ada, maka hasilnya null .

Contoh:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$oops", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Hasil:

{ "_id" : 1, "product" : null }
{ "_id" : 2, "product" : null }

Nilai Non-String

Semua ekspresi disediakan untuk $replaceAll harus mengevaluasi ke string atau null . Memberikan jenis lain akan mengembalikan kesalahan.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 3, "product" : "Long Weight", "price" : NumberDecimal("7.50") }

Coba kita cari dan ganti di price bidang:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$price", find: "7.50", replacement: "10.50" } }
      }
   }
])

Hasil:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$replaceAll requires that 'input' be a string, found: 7.50",
	"code" : 51746,
	"codeName" : "Location51746"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Ini mengembalikan kesalahan, seperti yang diharapkan.

Normalisasi Unicode

$replaceAll operator tidak melakukan normalisasi unicode.

Lihat dokumentasi MongoDB untuk informasi lebih lanjut tentang ini, dan sebuah contoh.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. DeprecationWarning:Mendengarkan acara di kelas Db telah ditinggalkan dan akan dihapus di versi utama berikutnya

  2. Subdokumen luwak vs skema bersarang

  3. Agregasi MongoDB dengan jumlah nilai array

  4. Agregasi MongoDB Menggunakan Java

  5. Akses MongoDB langsung melalui JavaScript