MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $type Оператор на заявка

В MongoDB можете да използвате $type оператор за заявка на елемент за филтриране на колекция от документи въз основа на тип BSON. Връща само онези документи, които имат определен тип BSON в определено поле.

Вие предоставяте полето и типа BSON и $type ще върне всички документи, които съвпадат.

Пример

Да предположим, че вмъкваме следните документи в колекция, наречена 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 },
    ]) 

Всеки документ съдържа служител заедно с възнаграждението на този служител.

Въпреки това, докато всеки документ има remuneration поле, можем да видим, че няма последователност в документите по отношение на типа BSON, използван в това поле.

Можем да използваме $type оператор на заявка, за да върне само онези документи, за които е указано remuneration полето е от определен тип BSON.

Пример:

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

Резултат:

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

В този случай само един документ има тип BSON двоен в remuneration поле.

Нека видим кои съдържат низове:

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

Резултат:

{ "_id" :1, "name" :"Sandy", "remuneration" :"Твърде много!!!" }{ "_id" :5, "name" :"Beck", "remuneration" :"10% комисионна" }{ "_id" :6, "name" :"Peter", "remuneration" :"70K" } 

number Псевдоним

Можете да използвате number псевдоним като удобен начин за връщане на документи, които съдържат числови типове.

Псевдонимът на номера съвпада със следните типове BSON:

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

Пример:

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

Резултат:

{ "_id" :2, "name" :"Сара", "възнаграждение" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :4, "name" :"Chris", "remuneration" :NumberDecimal("45000.75") }

Проверете за няколко типа

Можете да проверите за множество типове, като предоставите масив от типове BSON.

Пример:

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

Резултат:

{ "_id" :2, "name" :"Сара", "възнаграждение" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :7, "name" :"Homer", "remuneration" :null }

Филтриране по номер

Всеки тип BSON има съответен номер и псевдоним (както е посочено в документацията на MongoDB).

Предишните примери използват псевдонима. Като алтернатива можете да използвате номера вместо псевдонима на типа BSON.

Пример:

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

Резултат:

{ "_id" :2, "name" :"Сара", "възнаграждение" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :7, "name" :"Homer", "remuneration" :null }

В този случай предоставих масив от числа, които отговарят на double , int и null (който връща същия резултат като предишния пример).

Преди MongoDB 3.2 се приемаха само числа с $type оператор на заявка. Псевдонимите на низове се приемат само след MongoDB 3.2.

Върнете типа на поле

Има и $type оператор на конвейер за агрегиране, който ви позволява да получите BSON типа на стойността на полето.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Режимите на импортиране на mongoimport

  2. Как да увеличим производителността на операцията за актуализиране в Mongo?

  3. Вземете BinData UUID от Mongo като низ

  4. Инструменти на MongoDB от общността, които допълват ClusterControl

  5. Преобразувайте датата от милисекунди в обект ISODate