MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Operatore di query di tipo $ MongoDB

In MongoDB, puoi usare il $type operatore di query dell'elemento per filtrare una raccolta di documenti in base al tipo BSON. Restituisce solo quei documenti che hanno un particolare tipo BSON in un campo specifico.

Fornisci il campo e il tipo BSON e $type restituirà tutti i documenti corrispondenti.

Esempio

Supponiamo di inserire i seguenti documenti in una raccolta denominata 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 },
    ])

Ogni documento contiene un dipendente insieme alla sua retribuzione.

Tuttavia, mentre ogni documento ha una remuneration campo, possiamo vedere che non c'è coerenza tra i documenti per quanto riguarda il tipo BSON utilizzato in questo campo.

Possiamo usare il $type operatore di query per restituire solo quei documenti per i quali la remuneration il campo è di un certo tipo BSON.

Esempio:

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

Risultato:

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

In questo caso, solo un documento ha un tipo BSON di double nella remuneration campo.

Vediamo quali contengono stringhe:

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

Risultato:

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

Il number alias

Puoi usare il number alias come un modo conveniente per restituire documenti che contengono tipi numerici.

L'alias del numero corrisponde ai seguenti tipi BSON:

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

Esempio:

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

Risultato:

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

Controlla più tipi

Puoi verificare la presenza di più tipi fornendo una matrice di tipi BSON.

Esempio:

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

Risultato:

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

Filtra per numero

Ogni tipo BSON ha un numero e un alias corrispondenti (come descritto nella documentazione di MongoDB).

Gli esempi precedenti usano l'alias. In alternativa puoi utilizzare il numero invece dell'alias di tipo BSON.

Esempio:

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

Risultato:

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

In questo caso, ho fornito una matrice di numeri che corrispondono a double , int e null (che restituisce lo stesso risultato dell'esempio precedente).

Prima di MongoDB 3.2, solo i numeri erano accettati con il $type operatore di interrogazione. Gli alias di stringa sono stati accettati solo da MongoDB 3.2.

Restituisci il tipo di campo

C'è anche un $type operatore della pipeline di aggregazione che consente di ottenere il tipo BSON del valore di un campo.