Hướng dẫn does amazon use mongodb? - amazon có sử dụng mongodb không?

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

Show

Chủ đề

  • Lợi ích chức năng của Amazon DocumentDB
  • Cập nhật sự khác biệt chức năng
  • Sự khác biệt về chức năng với MongoDB

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

Cập nhật sự khác biệt chức năng

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

Giao dịch ngầm

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 }]
})
         

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 nhất quán 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 axit cho các hoạt động đa cấp và đa thu thập hiện được hỗ trợ. Để biết thêm về việc sử dụng các giao dịch trong Amazon DocumentDB, vui lòng xem các giao dịch.

Cập nhật sự khác biệt chức năng

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

Chủ đề

  • 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 nhất quán 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 axit cho các hoạt động đa cấp và đa thu thập hiện được hỗ trợ. Để biết thêm về việc sử dụng các giao dịch trong Amazon DocumentDB, vui lòng xem các giao dịch.
  • Sau đây là các ví dụ về các 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à nhất quán.
  • Các hoạt động cá nhân bao gồm các hoạt động số lượng lớn 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ộ hoạt động
    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 hoạt động chèn riêng lẻ thực thi thành công mà không có lỗi. Nếu gặp lỗi với hoạt động
    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 hoạt động
    db.runCommand({
      update: "miles",
      updates: [
        {
          q: { "credit_card": { $eq: true } },
          u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
          multi: true
        }
      ]
    })
             
    8 sẽ thực thi dưới dạng hoạt động nguyên tử. Nếu bạn yêu cầu các thuộc tính axit cho các 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, nên sử dụng một 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 việc ngược từ các khả năng mà khách hàng của chúng tôi yêu cầu chúng tôi xây dựng. Phần này chứa sự khác biệt về chức năng mà chúng tôi đã xóa trong Amazon DocumentDB để làm cho việc di chuyển và xây dựng các ứ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

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 nhất quán 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 axit cho các hoạt động đa cấp và đa thu thập hiện được hỗ trợ. Để biết thêm về việc sử dụng các giao dịch trong Amazon DocumentDB, vui lòng xem các giao dịch.

Sau đây là các ví dụ về các 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à nhất quán.

Các hoạt động cá nhân bao gồm các hoạt động số lượng lớn 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ộ hoạt động
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 hoạt động chèn riêng lẻ thực thi thành công mà không có lỗi. Nếu gặp lỗi với hoạt động
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 hoạt động
db.runCommand({
  update: "miles",
  updates: [
    {
      q: { "credit_card": { $eq: true } },
      u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
      multi: true
    }
  ]
})
         
8 sẽ thực thi dưới dạng hoạt động nguyên tử. Nếu bạn yêu cầu các thuộc tính axit cho các 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, nên sử dụng một 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 việc ngược từ các khả năng mà khách hàng của chúng tôi yêu cầu chúng tôi xây dựng. Phần này chứa sự khác biệt về chức năng mà chúng tôi đã xóa trong Amazon DocumentDB để làm cho việc di chuyển và xây dựng các ứng dụng dễ dàng hơn cho khách hàng của chúng tôi.

db.collection.getIndexes()

Lập chỉ mục mảng

[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]

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 nhất quán 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 axit cho các hoạt động đa cấp và đa thu thập hiện được hỗ trợ. Để biết thêm về việc sử dụng các giao dịch trong Amazon DocumentDB, vui lòng xem các giao dịch.

Sau đây là các ví dụ về các 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à nhất quán.

Sau đây là các ví dụ về các 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à nhất quán.

Các hoạt động cá nhân bao gồm các hoạt động số lượng lớn 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ộ hoạt động
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 hoạt động chèn riêng lẻ thực thi thành công mà không có lỗi. Nếu gặp lỗi với hoạt động
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 hoạt động
db.runCommand({
  update: "miles",
  updates: [
    {
      q: { "credit_card": { $eq: true } },
      u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
      multi: true
    }
  ]
})
         
8 sẽ thực thi dưới dạng hoạt động nguyên tử. Nếu bạn yêu cầu các thuộc tính axit cho các 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, nên sử dụng một 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 việc ngược từ các khả năng mà khách hàng của chúng tôi yêu cầu chúng tôi xây dựng. Phần này chứa sự khác biệt về chức năng mà chúng tôi đã xóa trong Amazon DocumentDB để làm cho việc di chuyển và xây dựng các ứng dụng dễ dàng hơn cho khách hàng của chúng tôi.

db.collection.getIndexes()

Lập chỉ mục mảng

[
    {
        "v" : 3,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
         

Sau đây là các ví dụ về các 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à nhất quán.

Các hoạt động cá nhân bao gồm các hoạt động số lượng lớn 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ộ hoạt động
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 hoạt động chèn riêng lẻ thực thi thành công mà không có lỗi. Nếu gặp lỗi với hoạt động
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 hoạt động
db.runCommand({
  update: "miles",
  updates: [
    {
      q: { "credit_card": { $eq: true } },
      u: { $mul: { "flight_miles.$[]": NumberInt(2) } },
      multi: true
    }
  ]
})
         
8 sẽ thực thi dưới dạng hoạt động nguyên tử. Nếu bạn yêu cầu các thuộc tính axit cho các 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, nên sử dụng một giao dịch.

Các hoạt động cá nhân bao gồm các hoạt động số lượng lớn 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ộ hoạt động 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 hoạt động chèn riêng lẻ thực thi thành công mà không có lỗi. Nếu gặp lỗi với hoạt động 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 hoạt động db.runCommand({ update: "miles", updates: [ { q: { "credit_card": { $eq: true } }, u: { $mul: { "flight_miles.$[]": NumberInt(2) } }, multi: true } ] }) 8 sẽ thực thi dưới dạng hoạt động nguyên tử. Nếu bạn yêu cầu các thuộc tính axit cho các 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, nên sử dụng một 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 việc ngược từ các khả năng mà khách hàng của chúng tôi yêu cầu chúng tôi xây dựng. Phần này chứa sự khác biệt về chức năng mà chúng tôi đã xóa trong Amazon DocumentDB để làm cho việc di chuyển và xây dựng các ứ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

Chỉ số đa khóa

Để 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 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,
db.runCommand({
  delete: "products",
  deletes: [{ q: { "cost": { $gt: 30.00 } }, limit: 0 }]
})
         
7 sẽ sử dụng chỉ mục
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 chọn bằng cách sử dụng lệnh
db.collection.getIndexes()
0 hoặc sử dụng trình hồ sơ để ghi nhật ký các truy vấn chậm. Ví dụ,
db.collection.getIndexes()
1.

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 một 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 regex sử dụng tiền tố và không chỉ định các tùy chọn regex
db.collection.getIndexes()
4,
db.collection.getIndexes()
5 hoặc
db.collection.getIndexes()
6.

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

db.products.deleteMany({
  "cost": { $gt: 30.00 }
})
         
9, bạn nên tạo một chỉ mục trên các trường có tính chọn lọc cao trong đó 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 các chỉ mục trên các trường trong đó cùng một giá trị xảy ra 1000 lần hoặc ít hơn.

Dự đoán cho các tài liệu lồng nhau

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

db.collection.getIndexes()
8 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ẽ không được hỗ trợ trong Amazon DocumentDB 3.6.

Amazon DocumentDB 3.6 chỉ xem xét trường đầu tiên trong một tài liệu lồng nhau khi áp dụng một phép chiếu trong khi MongoDB 3.6 sẽ phân tích các subdocument và áp dụng trình chiếu cho mỗi tài liệu phụ.

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

db.collection.getIndexes()
9, thì hành vi hoạt động như mong đợi trong cả Amazon DocumentDB và MongoDB. Tuy nhiên, nếu phép chiếu là
[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
0 thì Amazon DocumentDB 3.6 sẽ chỉ áp dụng phép chiếu cho
[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
1 chứ không phải
[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
2 hoặc
[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
3. Trong Amazon DocumentDB 4.0, phép chiếu
[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
0 sẽ được áp dụng cho
[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
1,
[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
2 và
[
    {
        "v" : 3,
        "key" : {
        "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
3.

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

Chủ đề

  • Cơ sở dữ liệu và bộ sưu tập của quản trị viên
  • Cursormaxxtimems
  • explain()
  • Hạn chế tên trường
  • Chỉ số xây dựng
  • Tra cứu với phím trống trong đường dẫn
  • API mongDB, hoạt động và loại dữ liệu
  • Tiếng mong muốn và Mongo
  • Đặt hàng kết quả
  • Có thể thử lại viết
  • Chỉ số thưa thớt
  • Nén lưu trữ
  • Sử dụng $ elemmatch trong một biểu thức $ tất cả
  • $ ne, $ nin, $ nor, $ not, $ tồn tại và $ elemmatch lập chỉ mục
  • $lookup

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

Cursormaxxtimems

db.collection.getIndexes()0

Hạn chế tên trường

explain()

Chỉ số xây dựng

Hạn chế tên trường

Chỉ số xây dựng

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

API mongDB, hoạt động và loại dữ liệu

rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})

Tiếng mong muốn và Mongo

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

Đặt hàng kết quả

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

Có thể thử lại viết

Chỉ số xây dựng

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

API mongDB, hoạt động và loại dữ liệu

Tiếng mong muốn và Mongo

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

Khi bạn tìm kiếm một phím bao gồm chuỗi trống như một phần của đường dẫn (ví dụ:

[
    {
        "v" : 3,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
         
4,
[
    {
        "v" : 3,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
         
5) và đối tượng có đường dẫn khóa chuỗi trống (ví dụ:
[
    {
        "v" : 3,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
         
6) bên trong một mảng, Amazon DocumentDB sẽ trả về các kết quả khác nhau so với nếu bạn là Để chạy cùng một cái nhìn lên MongoDB.

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

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

[
    {
        "v" : 3,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
         
7 chuyển đổi chuỗi trống thành
[
    {
        "v" : 3,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
         
8, do đó, bộ tra cứu chuỗi được coi là chỉ mục mảng tra cứu.

API mongDB, hoạt động và loại dữ liệu

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

[ { "v" : 3, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test" } ] 9 và rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})0 Tiện ích

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 các tiện ích

[
    {
        "v" : 3,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.test"
    }
]
         
9 hoặc
rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
0. Khi bạn tạo một cơ sở dữ liệu mới trong Amazon DocumentDB bằng
rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
0, bạn cần tạo lại vai trò người dùng ngoài hoạt động khôi phục.

Đặt hàng kết quả

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

rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
4.

Ví dụ sau đây 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

rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
5, thứ tự sắp xếp không được bảo tồn trừ khi giai đoạn
rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
5 là giai đoạn cuối cùng trong đường ống tổng hợp. Khi sử dụng giai đoạn tổng hợp
rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
5 kết hợp với giai đoạn tổng hợp
rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
8, giai đoạn tổng hợp
rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
5 chỉ được áp dụng cho các bộ tích lũy
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
00 và
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
01. Trong Amazon DocumentDB 4.0, hỗ trợ đã được thêm vào
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
02 để tôn trọng thứ tự sắp xếp từ giai đoạn
rs0:PRIMARY< db.foo.insert({"a":{"$a":1}})
5 trước đó.

Có thể thử lại viết

Bắt đầu với các trình điều khiển tương thích MongoDB 4.2, 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 thử lại. Sự khác biệt chức năng sẽ 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

Viết có thể thử lại có thể được 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) } }
)
         
04 hoặc đối số từ khóa của Trình xây dựng MongoClient (ví dụ:
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
05.

Sau đây là một ví dụ Python vô hiệu hóa 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ỉ số thưa thớt

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

db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
06 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) } }
)
         
06, Amazon DocumentDB 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 đa khóa, thưa thớt, Amazon DocumentDB không hỗ trợ một ràng buộc chính duy nhất nếu việc tìm kiếm một tài liệu dẫn đến một tập hợp các giá trị và chỉ thiếu một tập hợp con của các trường được lập chỉ mục. Ví dụ,

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

Nén lưu trữ

Amazon DocumentDB hiện không hỗ trợ nén cho dữ liệu hoặc chỉ mục được lưu trữ. 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 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 $ tất cả

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) } }
)
         
11 trong biểu thức
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
12. Là một cách giải quyết, bạn có thể sử dụng toán tử
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
13 với
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
11 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

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) } } ) 18, db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 06 và db.miles.updateMany( { "credit_card": { $eq: true } }, { $mul: { "flight_miles.$[]": NumberInt(2) } } ) 11 lập chỉ mục

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

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) } }
)
         
18,
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
06,
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
26 và
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
11. Do đó, việc sử dụng các nhà khai thác này sẽ dẫn đến quét thu thậ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 được 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) } } ) 28

Amazon DocumentDB hỗ trợ khả năng thực hiện các trận đấu bình đẳng (ví dụ, tham gia bên ngoài bên trái) nhưng không hỗ trợ các nhóm 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) } }
)
         
28

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

db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
28. 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) } }
)
         
28 và giúp bạn chọn phần tốt nhất cho khối lượng công việc của bạn.

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

db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
32 được sử dụng và sắp xếp hợp nhất khi
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
33 được sử dụng. Đối với một số trường hợp sử dụng, có thể mong muố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ập hợp
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
28 có thể sử dụng:

  • Vòng lặp lồng nhau: Một kế hoạch 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 là: A nested loop plan is typically beneficial for a workload if the foreign collection is <1 GB and the field in the foreign collection has an index. If the nested loop algorithm is being used, the explain plan will show the stage as
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    35.
  • 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à bộ dữ liệu làm việc không phù hợp 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) } }
    )
             
    36.
    : A sort merge plan is typically beneficial for a workload if the foreign collection does not have an index on the field used in lookup and the working dataset doesn’t fit in memory. If the sort merge algorithm is being used, the explain plan will show the stage as
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    36.
  • Hash: Kế hoạch 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 là <1GB và bộ dữ liệu làm việc 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) } }
    )
             
    37.
    : A hash plan is typically beneficial for a workload if the foreign collection is < 1GB and the working dataset fits in memory. If the hash algorithm is being used, the explain plan will show the stage as
    db.miles.updateMany(
        { "credit_card": { $eq: true } }, 
        { $mul: { "flight_miles.$[]": NumberInt(2) } }
    )
             
    37.

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) } }
)
         
28 bằng cách sử dụng giải thích trên 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 phương thức sử dụng

db.collection.getIndexes()
0, bạn có thể sử dụng trình hồ sơ để xem xét thuật toán đang được sử dụng với việc sử dụng toán tử
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
28. Để biết thêm thông tin về Profiler, vui lòng xem Hồ sơ hoạt động của Amazon DocumentDB.

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

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) } }
)
         
28, bạn có thể sử dụng
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
41. Để 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 nhận xét:

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) } }
)
         
41 để 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) } }
)
         
45:

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) } }
)
         
46 của phương thức
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
47 để đ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) } }
)
         
28 trong khi sửa đổi thuật toán lập chỉ mục (tức là, ________ 145/________ 150/____ 151).

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

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) } }
)
         
28 bằng thuật toán
db.miles.updateMany(
    { "credit_card": { $eq: true } }, 
    { $mul: { "flight_miles.$[]": NumberInt(2) } }
)
         
50.

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