Mongodb _id thành chuỗi

Trong cơ sở dữ liệu, chúng tôi có dữ liệu được lưu trữ ở định dạng đối tượng như “ObjectId(“59f2c3eba83a576fe07c735c”)”. Tôi muốn trích xuất “59f2c3eba83a576fe07c735c” bằng truy vấn SQL nhưng truy vấn trên đang trả về giá trị ở định dạng đối tượng như “[[email được bảo vệ]”

Show
  • Để lấy dữ liệu ở định dạng Chuỗi từ đối tượng, hãy thay đổi giá trị của thuộc tính bên dưới thành sai trong Tùy chọn khoan
  • Mở Drill UI và nhấp vào tùy chọn
  • Mongodb _id thành chuỗi

  • Tìm kiếm bất động sản “cửa hàng. mongo. con trai. ghi . reader” và thay đổi giá trị thành “false”, nhấp vào Cập nhật
  • Mongodb _id thành chuỗi

  • Bây giờ hãy chạy truy vấn bên dưới để lấy ID đối tượng từ MongoDB dưới dạng Chuỗi
  • Query: select `p`.`_id`.`$oid` , `p`.`FirstName` from mongo.Sample.Person p
    
    `_id`.`$oid` is a selector for the object Id to show the same in String format
    

    đầu ra

    Mongodb _id thành chuỗi

  • Bây giờ trong ảnh chụp màn hình ở trên, chúng ta có thể thấy dữ liệu được hiển thị ở định dạng Chuỗi
  • Mongodb _id thành chuỗi

    Phần mềm kinh doanh thông minh mã nguồn mở tốt nhất Helical Insight có ở đây

    Mongodb _id thành chuỗi

    Khung thông minh kinh doanh


    Miễn phí
    Tải xuống

    Mongodb _id thành chuỗi

    Phần mềm kinh doanh thông minh mã nguồn mở tốt nhất Helical Insight có ở đây

    Mongodb _id thành chuỗi

    Khung thông minh kinh doanh


    Miễn phí
    Tải xuống

    Trong trường hợp nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với chúng tôi tại [email được bảo vệ]
    Cảm ơn bạn
    Ramu Vudugula
    BI Developer
    Helical IT Solutions Pvt Ltd

    Chúng ta có thể thay đổi ID đối tượng trong MongoDB chuyển đổi mongoDb ObjectId thành chuỗi Ví dụ về mã Chuyển đổi ObjectId thành Chuỗi trong MongoDB Chuyển đổi Id đối tượng MongoDB thành chuỗi trong cơ sở dữ liệu Drill Drill UI Làm thế nào để bạn tìm thấy ID đối tượng của một chuỗi Mongodatabase Cửa hàng mongodb MongoDB

    0 0 phiếu

    Đánh giá bài viết

    Đặt mua

    Kết nối với

    Đăng nhập

    Tôi cho phép tạo tài khoản

    Khi bạn đăng nhập lần đầu tiên bằng nút Đăng nhập mạng xã hội, chúng tôi sẽ thu thập thông tin hồ sơ công khai tài khoản của bạn được nhà cung cấp Đăng nhập mạng xã hội chia sẻ, dựa trên cài đặt quyền riêng tư của bạn. Chúng tôi cũng lấy địa chỉ email của bạn để tự động tạo tài khoản cho bạn trên trang web của chúng tôi. Khi tài khoản của bạn được tạo, bạn sẽ đăng nhập vào tài khoản này

    Trong Mongoose, the được sử dụng để tìm một tài liệu bằng

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    54 của nó. Hàm
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    55 nhận một tham số duy nhất, id tài liệu. Nó trả về một lời hứa giải quyết tài liệu Mongoose nếu MongoDB tìm thấy một tài liệu với
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    56 đã cho hoặc
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    57 nếu không tìm thấy tài liệu nào

    Khi bạn gọi ________ 158, Mongoose gọi ________ 159 bí mật. Điều đó có nghĩa là

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    55 kích hoạt phần mềm trung gian
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    61

    Mongoose đưa ra các truy vấn để phù hợp với lược đồ của bạn. Điều đó có nghĩa là nếu

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    54 của bạn là một MongoDB ObjectId, bạn có thể chuyển
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    54 dưới dạng một chuỗi và Mongoose sẽ chuyển đổi nó thành một ObjectId cho bạn

    Tham số đầu tiên cho , , , v.v. được gọi là

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    64. Trong nội dung cũ hơn, tham số này đôi khi được gọi là
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    65 hoặc
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    66. Ví dụ

    Khi bạn thực hiện truy vấn bằng cách sử dụng hoặc , Mongoose sẽ tạo bộ lọc để khớp với lược đồ của bạn

    Nếu Mongoose không truyền bộ lọc tới lược đồ của bạn, truy vấn của bạn sẽ đưa ra một kết quả

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    67

    Theo mặc định, Mongoose không truyền các thuộc tính bộ lọc không có trong lược đồ của bạn

    Bạn có thể định cấu hình hành vi này bằng cách sử dụng. Tùy chọn này tương tự như tùy chọn. Đặt

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    68 thành
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    692 sẽ xóa các thuộc tính không phải lược đồ khỏi bộ lọc

    Để khiến Mongoose đưa ra lỗi nếu

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    64 của bạn có một thuộc tính không có trong lược đồ, hãy đặt
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    68 thành
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    695

    Do các lược đồ, Mongoose biết các loại trường nên là gì, vì vậy nó có thể cung cấp một số đường cú pháp gọn gàng. Ví dụ: nếu bạn quên đặt

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    696 trên trường không có mảng, Mongoose sẽ thêm
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    696 cho bạn

    Sau đây là những khác biệt về chức năng giữa Amazon DocumentDB (có khả năng tương thích với MongoDB) và MongoDB

    Lợi ích chức năng của Amazon DocumentDB

    Giao dịch ngầm

    Trong Amazon DocumentDB, tất cả các câu lệnh CRUD (

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    2,
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    3,
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    4,
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    5) đảm bảo tính nguyên tử và tính nhất quán, ngay cả đối với các hoạt động sửa đổi nhiều tài liệu. Với sự ra mắt của Amazon DocumentDB 4. 0, các giao dịch rõ ràng cung cấp các thuộc tính ACID cho các hoạt động đa câu lệnh và nhiều bộ sưu tập hiện được hỗ trợ. Để biết thêm về cách sử dụng giao dịch trong Amazon DocumentDB, vui lòng xem Giao dịch

    Sau đây là các ví dụ về hoạt động trong Amazon DocumentDB sửa đổi nhiều tài liệu đáp ứng cả hành vi nguyên tử và hành vi nhất quán

    db.miles.update(
        { "credit_card": { $eq: true } },
        { $mul: { "flight_miles.$[]": NumberInt(2) } },
        { multi: true }
    )
             
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             

    Các hoạt động riêng lẻ tạo thành các hoạt động hàng loạt như

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    6 và
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    7 là nguyên tử nhưng toàn bộ hoạt động hàng loạt không phải là nguyên tử. Ví dụ: toàn bộ thao tác
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    8 là nguyên tử nếu các thao tác chèn riêng lẻ thực hiện thành công mà không có lỗi. Nếu gặp lỗi với thao tác
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    8, mỗi câu lệnh chèn riêng lẻ trong thao tác
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    8 sẽ thực thi như một thao tác nguyên tử. Nếu bạn yêu cầu thuộc tính ACID cho hoạt động
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    8,
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    6 và
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    7, bạn nên sử dụng giao dịch

    Amazon DocumentDB tiếp tục cải thiện khả năng tương thích với MongoDB bằng cách làm ngược lại các khả năng mà khách hàng yêu cầu chúng tôi xây dựng. Phần này chứa các điểm khác biệt về chức năng mà chúng tôi đã loại bỏ trong Amazon DocumentDB để giúp việc di chuyển và xây dựng ứng dụng dễ dàng hơn cho khách hàng của chúng tôi

    Lập chỉ mục mảng

    Kể từ ngày 23 tháng 4 năm 2020, Amazon DocumentDB hiện hỗ trợ khả năng lập chỉ mục các mảng lớn hơn 2.048 byte. Giới hạn cho một mục riêng lẻ trong một mảng vẫn là 2.048 byte, phù hợp với MongoDB

    Nếu bạn đang tạo một chỉ mục mới, bạn không cần thực hiện hành động nào để tận dụng chức năng được cải thiện. Nếu bạn có một chỉ mục hiện có, bạn có thể tận dụng lợi thế của chức năng được cải thiện bằng cách bỏ chỉ mục rồi tạo lại nó. Phiên bản chỉ mục hiện tại với các khả năng được cải thiện là

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    4

    Đối với các cụm sản xuất, việc giảm chỉ mục có thể ảnh hưởng đến hiệu suất ứng dụng của bạn. Chúng tôi khuyên bạn nên kiểm tra trước và tiến hành thận trọng khi thực hiện các thay đổi đối với hệ thống sản xuất. Ngoài ra, thời gian cần thiết để tạo lại chỉ mục sẽ là một chức năng của kích thước dữ liệu tổng thể của bộ sưu tập

    Bạn có thể truy vấn phiên bản chỉ mục của mình bằng lệnh sau

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    9

    Đầu ra từ hoạt động này trông giống như sau. Trong kết quả này, phiên bản của chỉ mục là

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    4, đây là phiên bản chỉ mục mới nhất

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    1

    Chỉ mục đa phím

    Kể từ ngày 23 tháng 4 năm 2020, Amazon DocumentDB hiện hỗ trợ khả năng tạo chỉ mục phức hợp với nhiều khóa trong cùng một mảng

    Nếu bạn đang tạo một chỉ mục mới, bạn không cần thực hiện hành động nào để tận dụng chức năng được cải thiện. Nếu bạn có một chỉ mục hiện có, bạn có thể tận dụng lợi thế của chức năng được cải thiện bằng cách bỏ chỉ mục rồi tạo lại nó. Phiên bản chỉ mục hiện tại với các khả năng được cải thiện là

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    4

    Đối với các cụm sản xuất, việc giảm chỉ mục có thể ảnh hưởng đến hiệu suất ứng dụng của bạn. Chúng tôi khuyên bạn nên kiểm tra trước và tiến hành thận trọng khi thực hiện các thay đổi đối với hệ thống sản xuất. Ngoài ra, thời gian cần thiết để tạo lại chỉ mục sẽ là một chức năng của kích thước dữ liệu tổng thể của bộ sưu tập

    Bạn có thể truy vấn phiên bản chỉ mục của mình bằng lệnh sau

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    9

    Đầu ra từ hoạt động này trông giống như sau. Trong kết quả này, phiên bản của chỉ mục là

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    4, đây là phiên bản chỉ mục mới nhất

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    5

    Ký tự Null trong chuỗi

    Kể từ ngày 22 tháng 6 năm 2020, Amazon DocumentDB hiện hỗ trợ các ký tự rỗng (

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    8 ) trong chuỗi

    Kiểm soát truy cập dựa trên vai trò

    Kể từ ngày 26 tháng 3 năm 2020, Amazon DocumentDB hỗ trợ kiểm soát truy cập dựa trên vai trò (RBAC) cho các vai trò tích hợp. Để tìm hiểu thêm, hãy xem Kiểm soát truy cập dựa trên vai trò. Amazon DocumentDB chưa hỗ trợ vai trò tùy chỉnh cho RBAC

    db.products.deleteMany({ "cost": { $gt: 30.00 } }) 9 lập chỉ mục

    Kể từ ngày 22 tháng 6 năm 2020, Amazon DocumentDB hiện hỗ trợ khả năng cho người vận hành

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    9 sử dụng chỉ mục

    Để sử dụng một chỉ mục với toán tử

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    9, bạn phải sử dụng lệnh
    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             
    2. Khi sử dụng
    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             
    2, bạn phải chỉ định tên của trường mà bạn đang áp dụng
    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    9 trên. Ví dụ: nếu bạn có một chỉ mục trên trường
    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             
    5 với tên chỉ mục là
    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             
    6, thì
    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             
    7 sẽ sử dụng chỉ mục của
    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             
    6, nhưng
    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             
    9 sẽ không sử dụng chỉ mục đó. Bạn có thể xác minh xem một chỉ mục có được chọn hay không bằng cách sử dụng lệnh
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    90 hoặc sử dụng trình lược tả để ghi lại các truy vấn chậm. Ví dụ,
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    91

    Phương pháp

    db.runCommand({
      delete: "products",
      deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
    })
             
    2 chỉ có thể được sử dụng với một chỉ mục tại một thời điểm

    Việc sử dụng chỉ mục cho truy vấn

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    9 được tối ưu hóa cho các truy vấn biểu thức chính quy sử dụng tiền tố và không chỉ định các tùy chọn biểu thức chính quy
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    94,
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    95 hoặc
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    96

    Khi sử dụng chỉ mục với

    db.products.deleteMany({
      "cost": { $gt: 30.00 }
    })
             
    9, bạn nên tạo chỉ mục trên các trường có tính chọn lọc cao, nơi số lượng giá trị trùng lặp nhỏ hơn 1% tổng số tài liệu trong bộ sưu tập. Ví dụ: nếu bộ sưu tập của bạn chứa 100.000 tài liệu, chỉ tạo chỉ mục trên các trường có cùng một giá trị xảy ra 1000 lần hoặc ít hơn

    Phép chiếu cho các tài liệu lồng nhau

    Có sự khác biệt về chức năng với toán tử

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    98 giữa Amazon DocumentDB và MongoDB trong phiên bản 3. 6 đã được giải quyết trong Amazon DocumentDB 4. 0 nhưng sẽ vẫn không được hỗ trợ trong Amazon DocumentDB 3. 6

    Tài liệu AmazonDB 3. 6 chỉ xem xét trường đầu tiên trong tài liệu lồng nhau khi áp dụng phép chiếu trong khi MongoDB 3. 6 sẽ phân tích các tài liệu con và cũng áp dụng phép chiếu cho từng tài liệu con

    Ví dụ. nếu phép chiếu là

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    99, thì hành vi sẽ hoạt động như mong đợi trong cả Amazon DocumentDB và MongoDB. Tuy nhiên, nếu phép chiếu là
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    10 thì Amazon DocumentDB 3. 6 sẽ chỉ áp dụng phép chiếu cho
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    11 chứ không áp dụng cho
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    12 hoặc
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    13. Trong Tài liệu AmazonDB 4. 0, phép chiếu
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    10 sẽ được áp dụng cho
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    11,
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    12 và
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    13

    Sự khác biệt về chức năng với MongoDB

    Cơ sở dữ liệu quản trị và bộ sưu tập

    Amazon DocumentDB không hỗ trợ quản trị viên hoặc cơ sở dữ liệu cục bộ cũng như bộ sưu tập MongoDB

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    18 hoặc
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    19 tương ứng

    Trong Amazon DocumentDB,

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    90 đặt lại bộ đếm cho mỗi yêu cầu
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    91. Do đó, nếu một 3000MS
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    92 được chỉ định, thì truy vấn mất 2800MS và mỗi yêu cầu
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    91 tiếp theo mất 300MS, sau đó con trỏ sẽ không hết thời gian chờ. Con trỏ sẽ chỉ hết thời gian chờ khi một thao tác đơn lẻ, hoặc là truy vấn hoặc một yêu cầu
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    91 riêng lẻ, chiếm nhiều thời gian hơn
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    92 đã chỉ định. Hơn nữa, trình quét kiểm tra thời gian thực hiện con trỏ chạy ở mức độ chi tiết nhỏ

    giải thích()

    Amazon DocumentDB giả lập MongoDB 4. 0 trên một công cụ cơ sở dữ liệu được xây dựng có mục đích sử dụng hệ thống lưu trữ phân tán, chịu lỗi, tự phục hồi. Do đó, kế hoạch truy vấn và đầu ra của

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    90 có thể khác nhau giữa Amazon DocumentDB và MongoDB. Những khách hàng muốn kiểm soát kế hoạch truy vấn của họ có thể sử dụng toán tử
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    97 để thực thi lựa chọn chỉ mục ưa thích

    Giới hạn tên trường

    Amazon DocumentDB không hỗ trợ dấu chấm “. ” trong tên trường tài liệu, ví dụ:

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    98

    Amazon DocumentDB cũng không hỗ trợ tiền tố $ trong tên trường

    Ví dụ: hãy thử lệnh sau trong Amazon DocumentDB hoặc MongoDB

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    7

    MongoDB sẽ trả về như sau

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    0

    Amazon DocumentDB sẽ trả về lỗi

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    1

    Có một ngoại lệ cho sự khác biệt chức năng này. Các tên trường bắt đầu bằng tiền tố $ sau đây đã được đưa vào danh sách cho phép và có thể được sử dụng thành công trong Amazon DocumentDB. $id, $ref và $db

    Bản dựng chỉ mục

    Amazon DocumentDB chỉ cho phép xây dựng một chỉ mục trên một bộ sưu tập tại bất kỳ thời điểm nào. Ở phía trước hoặc phía sau. Nếu các thao tác như

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    99 hoặc
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    50 xảy ra trên cùng một bộ sưu tập khi quá trình xây dựng chỉ mục hiện đang được tiến hành, thì thao tác mới thử sẽ không thành công

    Theo mặc định, chỉ mục được xây dựng trong Amazon DocumentDB và MongoDB phiên bản 4. 0 xảy ra trong nền. MongoDB phiên bản 4. 2 và sau đó bỏ qua tùy chọn xây dựng chỉ mục nền nếu được chỉ định để tạoChỉ mục hoặc trình trợ giúp trình bao của nó

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    99 và
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    52

    Chỉ mục Thời gian tồn tại (TTL) bắt đầu hết hạn tài liệu sau khi quá trình xây dựng chỉ mục hoàn tất

    Tra cứu với phím trống trong đường dẫn

    Khi bạn tra cứu bằng một khóa bao gồm chuỗi rỗng như một phần của đường dẫn (e. g.

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    53,
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    54) và đối tượng có đường dẫn khóa chuỗi trống (e. g.
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    55) bên trong một mảng, Amazon DocumentDB sẽ trả về các kết quả khác so với khi bạn chạy cùng một tra cứu trong MongoDB

    Trong MongoDB, đường dẫn khóa trống tra cứu trong mảng hoạt động như mong đợi khi khóa chuỗi trống không ở cuối đường dẫn tra cứu. Tuy nhiên, khi khóa chuỗi trống ở cuối đường dẫn tra cứu, nó không nhìn vào mảng

    Tuy nhiên, trong Amazon DocumentDB, chỉ phần tử đầu tiên trong mảng được đọc, vì

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    56 chuyển đổi chuỗi rỗng thành
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    57, do đó, việc tra cứu khóa chuỗi được coi là tra cứu chỉ mục mảng

    MongoDB API, hoạt động và kiểu dữ liệu

    Amazon DocumentDB tương thích với MongoDB 3. 6 và 4. 0 API. Để biết danh sách cập nhật các chức năng được hỗ trợ, hãy xem API, Hoạt động và Loại dữ liệu MongoDB được hỗ trợ

    Tiện ích db.runCommand({ update: "miles", updates: [ { q: { "credit_card": { $eq: true } }, u: { $mul: { "flight_miles.$[]": NumberInt(2) } }, multi: true } ] }) 58 và db.runCommand({ update: "miles", updates: [ { q: { "credit_card": { $eq: true } }, u: { $mul: { "flight_miles.$[]": NumberInt(2) } }, multi: true } ] }) 59

    Amazon DocumentDB không hỗ trợ cơ sở dữ liệu quản trị và do đó không kết xuất hoặc khôi phục cơ sở dữ liệu quản trị khi sử dụng tiện ích

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    58 hoặc
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    59. Khi tạo cơ sở dữ liệu mới trong Amazon DocumentDB bằng cách sử dụng
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    59, ngoài thao tác khôi phục, bạn cần tạo lại vai trò người dùng

    Thứ tự kết quả

    Amazon DocumentDB không đảm bảo thứ tự sắp xếp kết quả ngầm định của tập hợp kết quả. Để đảm bảo thứ tự của tập kết quả, hãy chỉ định rõ ràng thứ tự sắp xếp bằng cách sử dụng

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    73

    Ví dụ sau sắp xếp các mục trong bộ sưu tập hàng tồn kho theo thứ tự giảm dần dựa trên trường chứng khoán

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    2

    Khi sử dụng giai đoạn tổng hợp ________ 674, thứ tự sắp xếp không được giữ nguyên trừ khi giai đoạn ________ 674 là giai đoạn cuối cùng trong quy trình tổng hợp. Khi sử dụng giai đoạn tổng hợp ________ 674 kết hợp với giai đoạn tổng hợp

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    77, giai đoạn tổng hợp ________ 674 chỉ được áp dụng cho bộ tích lũy
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    79 và
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    00. Trong Tài liệu AmazonDB 4. 0, hỗ trợ đã được thêm vào cho
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    01 để tôn trọng thứ tự sắp xếp từ giai đoạn
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    74 trước đó

    Ghi có thể thử lại

    Bắt đầu với MongoDB 4. 2 trình điều khiển tương thích, tính năng ghi có thể thử lại được bật theo mặc định. Tuy nhiên, Amazon DocumentDB hiện không hỗ trợ ghi có thể thử lại. Sự khác biệt về chức năng sẽ tự biểu hiện trong một thông báo lỗi tương tự như sau

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    3

    Ghi có thể thử lại có thể bị vô hiệu hóa thông qua chuỗi kết nối (ví dụ:

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    03 hoặc đối số từ khóa của hàm tạo MongoClient (ví dụ:
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    04

    Sau đây là một ví dụ Python tắt tính năng ghi có thể thử lại trong chuỗi kết nối

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    4

    Chỉ mục thưa thớt

    Để sử dụng chỉ mục thưa thớt mà bạn đã tạo trong truy vấn, bạn phải sử dụng mệnh đề

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    05 trên các trường bao gồm chỉ mục. Nếu bạn bỏ qua
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    05, Amazon DocumentDB sẽ không sử dụng chỉ mục thưa thớt

    Sau đây là một ví dụ

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    5

    Đối với các chỉ mục nhiều khóa, thưa thớt, Amazon DocumentDB không hỗ trợ ràng buộc khóa duy nhất nếu quá trình tra cứu tài liệu dẫn đến một tập hợp các giá trị và chỉ một tập hợp con của các trường được lập chỉ mục bị thiếu. Ví dụ:

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    07 không được hỗ trợ, với đầu vào là
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    08, vì
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    09 được lưu trữ trong chỉ mục

    nén lưu trữ

    Amazon DocumentDB hiện không hỗ trợ tính năng nén cho dữ liệu được lưu trữ hoặc chỉ mục. Kích thước dữ liệu cho dữ liệu được lưu trữ và chỉ mục có thể lớn hơn so với khi bạn sử dụng các tùy chọn khác

    Sử dụng $elemMatch trong một Biểu thức $all

    Amazon DocumentDB hiện không hỗ trợ việc sử dụng toán tử

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    10 trong biểu thức
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    11. Như một giải pháp thay thế, bạn có thể sử dụng toán tử
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    12 với
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    10 như sau

    hoạt động ban đầu

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    6

    hoạt động cập nhật

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    7

    Lập chỉ mục db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 14, db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 15, db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 16, db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 17, db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 05 và db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 10

    Amazon DocumentDB hiện không hỗ trợ khả năng sử dụng chỉ mục với các toán tử

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    14,
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    15,
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    16,
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    17,
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    05,
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    25 và
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    10. Do đó, việc sử dụng các toán tử này sẽ dẫn đến việc quét bộ sưu tập. Thực hiện bộ lọc hoặc khớp trước khi sử dụng một trong các toán tử này sẽ giảm lượng dữ liệu cần quét và do đó có thể cải thiện hiệu suất

    db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 27

    Amazon DocumentDB hỗ trợ khả năng thực hiện khớp đẳng thức (ví dụ: nối ngoài bên trái) nhưng không hỗ trợ các truy vấn con không tương quan

    Sử dụng một chỉ mục với
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27

    Bây giờ bạn có thể sử dụng chỉ mục với toán tử giai đoạn

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27. Dựa trên trường hợp sử dụng của bạn, có nhiều thuật toán lập chỉ mục mà bạn có thể sử dụng để tối ưu hóa hiệu suất. Phần này sẽ giải thích các thuật toán lập chỉ mục khác nhau cho
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27 và giúp bạn chọn thuật toán lập chỉ mục tốt nhất cho khối lượng công việc của mình

    Theo mặc định, Amazon DocumentDB sẽ sử dụng thuật toán băm khi sử dụng

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    31 và hợp nhất sắp xếp khi sử dụng
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    32. Đối với một số trường hợp sử dụng, có thể nên buộc trình tối ưu hóa truy vấn sử dụng một thuật toán khác. Dưới đây là các thuật toán lập chỉ mục khác nhau mà toán tử tổng hợp
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27 có thể sử dụng

    • Vòng lặp lồng nhau. Gói vòng lặp lồng nhau thường có lợi cho khối lượng công việc nếu bộ sưu tập nước ngoài <1 GB và trường trong bộ sưu tập nước ngoài có chỉ mục. Nếu thuật toán vòng lặp lồng nhau đang được sử dụng, kế hoạch giải thích sẽ hiển thị giai đoạn là
      db.miles.updateMany(
          { "credit_card": { $eq: true } }, 
          { $mul: { "flight_miles.$[]": NumberInt(2) } }
      )
               
      34
    • Sắp xếp hợp nhất. Kế hoạch hợp nhất sắp xếp thường có lợi cho khối lượng công việc nếu bộ sưu tập nước ngoài không có chỉ mục trên trường được sử dụng trong tra cứu và tập dữ liệu đang hoạt động không vừa với bộ nhớ. Nếu thuật toán hợp nhất sắp xếp đang được sử dụng, kế hoạch giải thích sẽ hiển thị giai đoạn là
      db.miles.updateMany(
          { "credit_card": { $eq: true } }, 
          { $mul: { "flight_miles.$[]": NumberInt(2) } }
      )
               
      35
    • Băm. Gói băm thường có lợi cho khối lượng công việc nếu bộ sưu tập nước ngoài < 1GB và tập dữ liệu đang hoạt động phù hợp với bộ nhớ. Nếu thuật toán băm đang được sử dụng, kế hoạch giải thích sẽ hiển thị giai đoạn là
      db.miles.updateMany(
          { "credit_card": { $eq: true } }, 
          { $mul: { "flight_miles.$[]": NumberInt(2) } }
      )
               
      36

    Bạn có thể xác định thuật toán lập chỉ mục đang được sử dụng cho toán tử

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27 bằng cách sử dụng giải thích về truy vấn. Dưới đây là một ví dụ

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    8

    Thay thế cho việc sử dụng phương pháp

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    90, bạn có thể sử dụng trình lược tả để xem lại thuật toán đang được sử dụng khi bạn sử dụng toán tử
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27. Để biết thêm thông tin về trình lược tả, vui lòng xem Lập hồ sơ Hoạt động của Amazon DocumentDB

    Sử dụng một
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    40

    Nếu bạn muốn buộc trình tối ưu hóa truy vấn sử dụng thuật toán lập chỉ mục khác với

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27, bạn có thể sử dụng một
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    40. Để làm điều đó, hãy sử dụng nhận xét trong các tùy chọn giai đoạn tổng hợp để buộc một kế hoạch khác. Dưới đây là một ví dụ về cú pháp cho bình luận

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    9

    Dưới đây là một ví dụ về việc sử dụng

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    40 để buộc trình tối ưu hóa truy vấn sử dụng thuật toán lập chỉ mục
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    44

    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    0

    Để kiểm tra thuật toán nào là tốt nhất cho khối lượng công việc của bạn, bạn có thể sử dụng tham số

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    45 của phương pháp
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    46 để đo thời gian thực hiện của giai đoạn
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27 trong khi sửa đổi thuật toán lập chỉ mục (i. e. ,
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    44/
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    49/
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    50)

    Ví dụ sau đây cho thấy cách sử dụng

    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    45 để đo thời gian thực hiện của giai đoạn
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    27 bằng thuật toán
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    49