MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $type Abfrageoperator

In MongoDB können Sie den $type verwenden -Element-Abfrageoperator zum Filtern einer Sammlung von Dokumenten basierend auf dem BSON-Typ. Es gibt nur die Dokumente zurück, die einen bestimmten BSON-Typ in einem bestimmten Feld haben.

Sie geben das Feld und den BSON-Typ sowie $type an gibt alle übereinstimmenden Dokumente zurück.

Beispiel

Angenommen, wir fügen die folgenden Dokumente in eine Sammlung namens employees ein :

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 },
    ])

Jedes Dokument enthält einen Mitarbeiter zusammen mit der Vergütung dieses Mitarbeiters.

Allerdings hat dabei jedes Dokument eine remuneration Feld können wir sehen, dass in Bezug auf den in diesem Feld verwendeten BSON-Typ keine Konsistenz zwischen den Dokumenten besteht.

Wir können den $type verwenden Abfrageoperator, um nur die Dokumente zurückzugeben, für die die remuneration Feld ist von einem bestimmten BSON-Typ.

Beispiel:

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

Ergebnis:

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

In diesem Fall hat nur ein Dokument einen doppelten BSON-Typ in der remuneration Feld.

Mal sehen, welche Strings enthalten:

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

Ergebnis:

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

Die number Alias

Sie können die number verwenden Alias ​​als bequeme Möglichkeit, Dokumente zurückzugeben, die numerische Typen enthalten.

Der Zahlenalias stimmt mit den folgenden BSON-Typen überein:

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

Beispiel:

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

Ergebnis:

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

Auf mehrere Typen prüfen

Sie können nach mehreren Typen suchen, indem Sie ein Array von BSON-Typen bereitstellen.

Beispiel:

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

Ergebnis:

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

Nach Nummer filtern

Jeder BSON-Typ hat eine entsprechende Nummer und einen Alias ​​(wie in der MongoDB-Dokumentation beschrieben).

Die vorherigen Beispiele verwenden den Alias. Sie können alternativ die Nummer anstelle des BSON-Typ-Alias ​​verwenden.

Beispiel:

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

Ergebnis:

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

In diesem Fall habe ich ein Array von Zahlen bereitgestellt, die double entsprechen , int , und null (was das gleiche Ergebnis wie das vorherige Beispiel zurückgibt).

Vor MongoDB 3.2 wurden nur Zahlen mit dem $type akzeptiert Abfrageoperator. String-Aliase werden erst seit MongoDB 3.2 akzeptiert.

Gibt den Typ eines Felds zurück

Es gibt auch einen $type Aggregations-Pipeline-Operator, mit dem Sie den BSON-Typ eines Feldwerts abrufen können.