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.