sql >> Database >  >> NoSQL >> MongoDB

MongoDB $type Query-operator

In MongoDB kunt u de $type . gebruiken element query-operator om een ​​verzameling documenten te filteren op basis van het BSON-type. Het retourneert alleen die documenten met een bepaald BSON-type in een specifiek veld.

U geeft het veld en het BSON-type op, en $type zal alle documenten retourneren die overeenkomen.

Voorbeeld

Stel dat we de volgende documenten invoegen in een verzameling met de naam 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 },
    ])

Elk document bevat een werknemer samen met de beloning van die werknemer.

Elk document heeft echter een remuneration veld, kunnen we zien dat er geen consistentie is tussen de documenten met betrekking tot het BSON-type dat in dit veld wordt gebruikt.

We kunnen de $type . gebruiken query-operator om alleen die documenten te retourneren waarvoor de remuneration veld is van een bepaald BSON-type.

Voorbeeld:

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

Resultaat:

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

In dit geval heeft slechts één document een BSON-type dubbel in de remuneration veld.

Laten we eens kijken welke strings bevatten:

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

Resultaat:

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

Het number Alias

U kunt het number . gebruiken alias als een handige manier om documenten te retourneren die numerieke typen bevatten.

De nummeralias komt overeen met de volgende BSON-typen:

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

Voorbeeld:

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

Resultaat:

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

Controleer op meerdere typen

U kunt op meerdere typen controleren door een reeks BSON-typen op te geven.

Voorbeeld:

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

Resultaat:

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

Filteren op nummer

Elk BSON-type heeft een bijbehorend nummer en alias (zoals beschreven in de MongoDB-documentatie).

De vorige voorbeelden gebruiken de alias. U kunt ook het nummer gebruiken in plaats van de alias van het BSON-type.

Voorbeeld:

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

Resultaat:

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

In dit geval heb ik een reeks getallen opgegeven die overeenkomen met double , int , en null (wat hetzelfde resultaat oplevert als het vorige voorbeeld).

Vóór MongoDB 3.2 werden alleen nummers geaccepteerd met het $type query-operator. Stringaliassen worden pas geaccepteerd sinds MongoDB 3.2.

Retourneer het type van een veld

Er is ook een $type aggregatiepijplijnoperator waarmee u het BSON-type van de waarde van een veld kunt ophalen.


  1. Snelste manier om dubbele documenten in mongodb te verwijderen

  2. Hoe MongoDB Java-stuurprogramma MongoOptions configureren voor productiegebruik?

  3. Weten wanneer de resque-werker de taak had voltooid

  4. MongoDB SSL met zelfondertekende certificaten in C#