I MongoDB, $type
aggregeringspipeline-operatören returnerar BSON-typen för sitt argument.
Du kan använda den för att ta reda på typen av ett givet fält.
Exempel
Anta att vi har en samling som heter cats
med följande dokument:
{ "_id" :ObjectId("60173c09c8eb4369cf6ad9e0"), "name" :"Scratch", "born" :ISODate("2021-01-03T23:30:15.123Z"), "weight" :30 /pre>Vi kan använda följande kod för att returnera typerna av dessa fält:
db.cats.aggregate( [ { $project: { _id: { $type: "$_id" }, name: { $type: "$name" }, born: { $type: "$born" }, weight: { $type: "$weight" } } } ] ).pretty()
Resultat:
{ "_id" :"objectId", "name" :"string", "born" :"date", "weight" :"double"}Exempel 2
Här är ett annat exempel som innehåller olika fält med olika BSON-typer.
Vi har en samling som heter
types
med följande dokument:{ "_id" :ObjectId("601738d7c8eb4369cf6ad9de"), "double" :123.75, "string" :"123", "boolean" :true, "date" :ISODate("2020-12-30:T23:3:15.123Z"), "integer" :123, "long" :NumberLong(123), "decimal" :NumberDecimal("123.75"), "object" :{ "a" :1 }, "array" :[ 1, 2, 3 ]}För syftet med den här artikeln har jag döpt varje fält för att återspegla dess BSON-typ.
Vi kan nu använda följande kod för att returnera typerna av dessa fält:
db.types.aggregate( [ { $project: { _id: { $type: "$_id" }, double: { $type: "$double" }, string: { $type: "$string" }, boolean: { $type: "$boolean" }, date: { $type: "$date" }, integer: { $type: "$integer" }, long: { $type: "$long" }, decimal: { $type: "$decimal" }, object: { $type: "$object" }, array: { $type: "$array" } } } ] ).pretty()
Resultat:
{ "_id" :"objectId", "double" :"double", "string" :"string", "boolean" :"bool", "date" :"date", "integer" :"int ", "long" :"long", "decimal" :"decimal", "object" :"objekt", "array" :"array"}Filtrering efter typ
Det finns också en
$type
elementfrågeoperator som låter dig filtrera en samling dokument baserat på BSON-typ.Sök efter siffror
Om du bara vill kontrollera om ett värde är ett tal, se MongoDB
$isNumber
.