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

MongoDB $replaceOne

$replaceOne operator pipa agregasi diperkenalkan di MongoDB 4.4.

Operator ini mengganti instance pertama dari string pencarian dalam string input dengan string pengganti dan mengembalikan hasilnya.

Jika string pencarian tidak ditemukan, maka $replaceOne 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 $replaceOne operator untuk mengganti instance pertama dari string Left Handed dengan string lain:

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

Hasil:

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

Perhatikan bahwa sebenarnya ada dua contoh string pencarian (Left Handed ) tetapi hanya contoh pertama yang diganti.

Untuk mengganti semua instance, gunakan $replaceAll operator.

Sensitivitas Huruf Besar

$replaceOne operator peka huruf besar/kecil.

Contoh:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceOne: { 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

$replaceOne 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: { $replaceOne: { 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: { $replaceOne: { 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 $replaceOne adalah null , hasilnya null .

Berikut ini contoh pemberian null bidang operator ke $replaceOne :

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceOne: { 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: { $replaceOne: { input: "$oops", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Hasil:

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

Nilai Non-String

Semua ekspresi disediakan untuk $replaceOne 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: { $replaceOne: { input: "$price", find: "7.50", replacement: "10.50" } }
      }
   }
])

Hasil:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$replaceOne 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

$replaceOne 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. apakah ada panggilan balik kesalahan koneksi luwak?

  2. 9 Fitur ClusterControl yang Tidak Akan Anda Temukan di Alat Manajemen Basis Data Lainnya

  3. 2 Cara Menghapus Database di MongoDB

  4. Bagaimana cara mengimpor data dari mongodb ke pandas?

  5. Hubungkan ke Host mongodb dari wadah buruh pelabuhan