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:
double32-bit integer64-bit integerdecimal
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.