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

Toán tử truy vấn MongoDB $ type

Trong MongoDB, bạn có thể sử dụng $type toán tử truy vấn phần tử để lọc tập hợp tài liệu dựa trên kiểu BSON. Nó chỉ trả về những tài liệu có loại BSON cụ thể trong một trường cụ thể.

Bạn cung cấp trường và loại BSON và $type sẽ trả lại tất cả các tài liệu phù hợp.

Ví dụ

Giả sử chúng ta chèn các tài liệu sau vào một bộ sưu tập có tên là employees :

db.employees.insertMany([
    { _id: 1, name: "Sandy", remuneration: "Too Much!!!" },
    { _id: 2, name: "Sarah", remuneration: NumberInt(128000) },
    { _id: 3, name: "Fritz", remuneration: 25000 },
    { _id: 4, name: "Chris", remuneration: NumberDecimal("45000.75") },
    { _id: 5, name: "Beck", remuneration: "10% commission" },
    { _id: 6, name: "Peter", remuneration: "70K" },
    { _id: 7, name: "Homer", remuneration: null },
    ])

Mỗi tài liệu chứa một nhân viên cùng với thù lao của nhân viên đó.

Tuy nhiên, trong khi mỗi tài liệu có một remuneration , chúng tôi có thể thấy rằng không có sự nhất quán giữa các tài liệu liên quan đến loại BSON đang được sử dụng trong trường này.

Chúng ta có thể sử dụng $type toán tử truy vấn để chỉ trả lại những tài liệu có remuneration trường thuộc một loại BSON nhất định.

Ví dụ:

db.employees.find( { remuneration: { $type: "double" } } )

Kết quả:

{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }

Trong trường hợp này, chỉ một tài liệu có loại BSON gấp đôi trong remuneration trường.

Hãy xem những cái nào chứa chuỗi:

db.employees.find( { remuneration: { $type: "string" } } )

Kết quả:

{ "_id" : 1, "name" : "Sandy", "remuneration" : "Too Much!!!" }
{ "_id" : 5, "name" : "Beck", "remuneration" : "10% commission" }
{ "_id" : 6, "name" : "Peter", "remuneration" : "70K" }

Số number Bí danh

Bạn có thể sử dụng number bí danh như một cách thuận tiện để trả về các tài liệu có chứa kiểu số.

Bí danh số khớp với các loại BSON sau:

  • double
  • 32-bit integer
  • 64-bit integer
  • decimal

Ví dụ:

db.employees.find( { remuneration: { $type: "number" } } )

Kết quả:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 4, "name" : "Chris", "remuneration" : NumberDecimal("45000.75") }

Kiểm tra nhiều loại

Bạn có thể kiểm tra nhiều loại bằng cách cung cấp một loạt các loại BSON.

Ví dụ:

db.employees.find( { 
  remuneration: { $type: ["double", "int", "null"] } 
  } )

Kết quả:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }

Lọc theo số

Mỗi loại BSON có một số và bí danh tương ứng (như được nêu trong tài liệu MongoDB).

Các ví dụ trước sử dụng bí danh. Ngoài ra, bạn có thể sử dụng số thay vì bí danh loại BSON.

Ví dụ:

db.employees.find( { 
  remuneration: { $type: [1, 16, 10] } 
  } )

Kết quả:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }

Trong trường hợp này, tôi đã cung cấp một mảng số tương ứng với double , intnull (trả về kết quả giống như ví dụ trước).

Trước MongoDB 3.2, chỉ các số được chấp nhận với $type toán tử truy vấn. Bí danh chuỗi chỉ được chấp nhận kể từ MongoDB 3.2.

Trả về loại trường

Ngoài ra còn có một $type nhà điều hành đường ống tổng hợp cho phép bạn nhận loại BSON của giá trị của trường.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ tuần

  2. Làm cách nào để kiểm tra xem một chỉ mục có đang được sử dụng hay không

  3. MongoDB $ năm

  4. Làm cách nào để sử dụng cursor.forEach () trong MongoDB bằng Node.js?

  5. Mongoose thêm nhiều đối tượng vào mảng nếu không tồn tại dựa trên