sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $type Query Operator

I MongoDB kan du använda $type elementfrågeoperator för att filtrera en samling dokument baserat på BSON-typ. Den returnerar bara de dokument som har en viss BSON-typ i ett specifikt fält.

Du anger fältet och BSON-typen och $type kommer att returnera alla dokument som matchar.

Exempel

Anta att vi infogar följande dokument i en samling som heter 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 },
    ])

Varje dokument innehåller en anställd tillsammans med den anställdes ersättning.

Men medan varje dokument har en remuneration fältet, kan vi se att det inte finns någon enhetlighet i dokumenten när det gäller den BSON-typ som används i det här fältet.

Vi kan använda $type frågeoperatör för att returnera bara de dokument för vilka remuneration fältet är av en viss BSON-typ.

Exempel:

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

Resultat:

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

I det här fallet har bara ett dokument en BSON-typ av dubbel i remuneration fältet.

Låt oss se vilka som innehåller strängar:

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

Resultat:

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

number Alias

Du kan använda number alias som ett bekvämt sätt att returnera dokument som innehåller numeriska typer.

Nummeraliaset matchar följande BSON-typer:

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

Exempel:

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

Resultat:

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

Sök efter flera typer

Du kan söka efter flera typer genom att tillhandahålla en rad BSON-typer.

Exempel:

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

Resultat:

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

Filtrera efter nummer

Varje BSON-typ har ett motsvarande nummer och alias (som beskrivs i MongoDB-dokumentationen).

De tidigare exemplen använder aliaset. Du kan alternativt använda numret istället för aliaset av BSON-typ.

Exempel:

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

Resultat:

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

I det här fallet tillhandahöll jag en uppsättning siffror som motsvarar double , int och null (vilket ger samma resultat som föregående exempel).

Före MongoDB 3.2 accepterades endast nummer med $type frågeoperatör. Strängalias har bara accepterats sedan MongoDB 3.2.

Returnera ett fälts typ

Det finns också en $type aggregeringspipeline-operatör som låter dig få BSON-typen för ett fälts värde.


  1. Mongodb matchar karaktärer med accent som underliggande karaktär

  2. Använder du Redis för att implementera inloggning?

  3. Hur man konstruerar och skickar bson-dokument - Go lang?

  4. Geografiskt distribuerade MongoDB Replica Sets för 100 % drifttid