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

MongoDB $ ReplaceOne

$replaceOne 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ế phiên bản đầu tiên 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ì $replaceOne 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 $replaceOne 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: { $replaceOne: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Kết quả:

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

Lưu ý rằng thực tế có hai trường hợp của chuỗi tìm kiếm (Left Handed ) nhưng chỉ có trường hợp đầu tiên được thay thế.

Để thay thế tất cả các trường hợp, hãy sử dụng $replaceAll nhà điều hành.

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

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

Ví dụ:

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

$replaceOne 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 dấu sắc:

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

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceOne: { 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: { $replaceOne: { 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 $replaceOne 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: { $replaceOne: { input: "$price", find: "7.50", replacement: "10.50" } }
      }
   }
])

Kết quả:

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

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

Chuẩn hóa Unicode

$replaceOne 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. Các tài liệu duy nhất sử dụng nhiều giá trị trong Mongoose Schema

  2. Chuẩn bị máy chủ MongoDB để sản xuất

  3. Các tài liệu phụ Mongoose so với lược đồ lồng nhau

  4. So sánh hiệu suất MongoDB trên đám mây công cộng:AWS, Azure &DigitalOcean

  5. Triển khai và giám sát cơ sở dữ liệu nguồn mở miễn phí với ClusterControl Community Edition