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

MongoDB $ toDecimal

Từ MongoDB 4.0, bạn có thể sử dụng $toDecimal toán tử đường ống tổng hợp để chuyển đổi một giá trị thành một số thập phân.

Hầu hết các loại đều có thể được chuyển đổi thành số thập phân, nhưng ObjectId thì không.

Khi bạn chuyển đổi giá trị Ngày thành số thập phân, $toDecimal trả về số mili giây kể từ kỷ nguyên tương ứng với giá trị ngày.

Khi bạn chuyển đổi một boolean thành một số thập phân, nếu boolean là true , thì số thập phân là 1 . Nếu boolean là false , thì số thập phân là 0 .

Ví dụ

Giả sử chúng ta có một tập hợp được gọi là types và nó chứa các tài liệu sau:

{
	"_id" : ObjectId("601340eac8eb4369cf6ad9db"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75")
}

Chúng ta có thể sử dụng $toDecimal toán tử để chuyển đổi các kiểu đó (ngoại trừ ObjectId) thành số thập phân. Nếu đầu vào đã là số thập phân, thì nó chỉ cần trả về số thập phân.

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          double: { $toDecimal: "$double" },
          string: { $toDecimal: "$string" },
          boolean: { $toDecimal: "$boolean" },
          date: { $toDecimal: "$date" },
          integer: { $toDecimal: "$integer" },
          long: { $toDecimal: "$long" },
          decimal: { $toDecimal: "$decimal" }
        }
    }
  ]
).pretty()

Kết quả:

{
	"double" : NumberDecimal("123.750000000000"),
	"string" : NumberDecimal("123"),
	"boolean" : NumberDecimal("1"),
	"date" : NumberDecimal("1609457415123"),
	"integer" : NumberDecimal("123.000000000000"),
	"long" : NumberDecimal("123"),
	"decimal" : NumberDecimal("123.75")
}

Lỗi

Nếu bạn gặp lỗi, hãy thử sử dụng $convert toán tử thay vì $toDecimal . $convert cho phép bạn xử lý các lỗi mà không ảnh hưởng đến toàn bộ hoạt động tổng hợp.

$toDecimal toán tử tương đương với việc sử dụng $convert toán tử để chuyển đổi một giá trị thành một số thập phân.

Dưới đây là một ví dụ về việc sử dụng $convert để cố gắng chuyển đổi một ObjectId thành một số thập phân (dẫn đến lỗi):

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$_id", 
              to: "decimal",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

Kết quả:

{ "result" : "An error occurred" } 

Sử dụng $convert cho phép chúng tôi chỉ định thông báo lỗi để sử dụng khi lỗi xảy ra và nó không làm tạm dừng toàn bộ hoạt động tổng hợp.

Xem MongoDB $convert để biết thêm ví dụ.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cơ sở dữ liệu hướng tài liệu có được dùng để thay thế cơ sở dữ liệu quan hệ không?

  2. Duy trì bộ bản sao MongoDB trong đám mây bằng cách sử dụng Ansible

  3. Thứ tự của các chỉ mục kết hợp quan trọng như thế nào trong hiệu suất MongoDB?

  4. Cài đặt MongoDB trên CentOS 7

  5. MongoDB và CodeIgniter