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

MongoDB $ toBool

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

Khi bạn chuyển đổi một giá trị thành boolean, kết quả sẽ là true hoặc false , tùy thuộc vào giá trị đầu vào.

Nói chung, đối với các giá trị số, giá trị này sẽ trả về false nếu giá trị bằng 0 (0 ) và true cho bất kỳ giá trị nào khác.

Đối với các giá trị chuỗi, ObjectId và Date, nó sẽ luôn trả về true .

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("60133e50c8eb4369cf6ad9d9"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75")
}
{
	"_id" : ObjectId("60133e50c8eb4369cf6ad9da"),
	"double" : 0,
	"string" : "",
	"boolean" : false,
	"date" : null,
	"integer" : 0,
	"long" : NumberLong(0),
	"decimal" : NumberDecimal("0.0")
}

Chúng ta có thể sử dụng $toBool toán tử để chuyển đổi tất cả các kiểu đó thành boolean. Nếu đầu vào là boolean, thì nó chỉ trả về boolean.

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

Kết quả:

{
	"objectId" : true,
	"double" : true,
	"string" : true,
	"boolean" : true,
	"date" : true,
	"integer" : true,
	"long" : true,
	"decimal" : true
}
{
	"objectId" : true,
	"double" : false,
	"string" : true,
	"boolean" : false,
	"date" : null,
	"integer" : false,
	"long" : false,
	"decimal" : false
}

Chúng ta có thể thấy rằng tất cả các giá trị trong tài liệu đầu tiên đều trả về true , nhưng nhiều trong tài liệu thứ hai trả về false . Ngoài ra, giá trị ngày trả về null vì nó null để bắt đầu với.

Lỗi

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

$toBool toán tử tương đương với việc sử dụng $convert toán tử để chuyển đổi giá trị thành boolean.

Dưới đây là một ví dụ về việc sử dụng $convert để chuyển đổi một chuỗi thành boolean ::

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

Kết quả:

{ "result" : true } 

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB riêng biệt ()

  2. Truy vấn Mongodb dựa trên mục ở vị trí cụ thể trong mảng

  3. MongoDB Không tìm thấy thư mục dữ liệu / data / db

  4. Số lượng tham số tối đa được truyền đến $ trong truy vấn trong MongoDB là bao nhiêu?

  5. Kiến trúc ứng dụng dựa trên Mongoose