MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ ReplaceAll

$replaceAll nhà điều hành đường ống tổng hợp đã được giới thiệu trong MongoDB 4.4.

Toán tử này thay thế tất cả các trường hợp của một chuỗi tìm kiếm trong một chuỗi đầu vào bằng một chuỗi thay thế và trả về kết quả.

Nếu không tìm thấy chuỗi tìm kiếm thì $replaceAll trả về chuỗi đầu vào.

Ví dụ

Giả sử chúng ta có một bộ sưu tập được gọi là products với tài liệu sau:

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

Hãy sử dụng $replaceAll toán tử để thay thế phiên bản đầu tiên của chuỗi Left Handed với một chuỗi khác:

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

Kết quả:

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

Lưu ý rằng cả hai trường hợp của chuỗi tìm kiếm (Left Handed ) đã được thay thế.

Như tên cho thấy, $replaceAll thay thế tất cả lần xuất hiện của chuỗi tìm kiếm. Để chỉ thay thế đầu tiên sự xuất hiện, sử dụng $replaceOne .

Phân biệt chữ hoa chữ thường

$replaceAll toán tử phân biệt chữ hoa chữ thường.

Ví dụ:

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

Kết quả:

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

Trong trường hợp này, tôi đã thay đổi trường hợp của một ký tự trong chuỗi tìm kiếm của mình. Tôi đã thay đổi Handed đến handed . Điều này dẫn đến chuỗi tìm kiếm không được tìm thấy và vì vậy không có gì được thay thế. Do đó, chuỗi đầu vào đã được trả về.

Độ nhạy dấu phụ

$replaceAll toán tử nhạy cảm với dấu phụ.

Giả sử chúng ta thêm tài liệu sau vào bộ sưu tập của mình:

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

Và bây giờ chúng ta hãy thử tìm kiếm và thay thế từ Toupée , nhưng quên sử dụng trọng âm:

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

Kết quả:

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

Không thay đổi.

Tôi đã không bao gồm dấu phụ trong chuỗi tìm kiếm của mình và vì vậy không có dấu nào phù hợp.

Đây là một lần nữa, nhưng lần này tôi bao gồm dấu phụ:

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

Kết quả:

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

Lần này, chuỗi tìm kiếm đã được tìm thấy và thay thế.

Biểu thức rỗng

Nếu bất kỳ biểu thức nào được cung cấp cho $replaceAll null , kết quả là null .

Dưới đây là một ví dụ về việc cung cấp null trường toán tử thành $replaceAll :

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

Kết quả:

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

Trong trường hợp này, find trường toán tử null và kết quả là null .

Các trường bị thiếu

Nếu input hoặc find các trường toán tử tham chiếu đến một trường không tồn tại, khi đó kết quả là null .

Ví dụ:

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

Kết quả:

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

Giá trị không phải chuỗi

Tất cả các biểu thức được cung cấp cho $replaceAll phải đánh giá thành một chuỗi hoặc null . Cung cấp bất kỳ loại nào khác sẽ trả về lỗi.

Giả sử chúng ta thêm tài liệu sau vào bộ sưu tập của mình:

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

Hãy thử tìm kiếm và thay thế trên price lĩnh vực:

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

Kết quả:

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

Nó trả về một lỗi, như mong đợi.

Chuẩn hóa Unicode

$replaceAll toán tử không thực hiện bất kỳ quá trình chuẩn hóa unicode nào.

Xem tài liệu MongoDB để biết thêm thông tin về điều này và một ví dụ.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Phân tích cú pháp chuỗi ngày ISO8601 thành ngày tháng với Múi giờ UTC

  2. 3 cách để chọn hàng có giá trị nhỏ nhất trong SQL

  3. MongoDB Aggregation:Làm thế nào để có được tổng số bản ghi?

  4. MongoDB $ tuần

  5. Làm cách nào để lấy được objectID sau khi tôi lưu một đối tượng trong Mongoose?