В MongoDB, $type
Операторът на конвейера за агрегиране връща BSON типа на своя аргумент.
Можете да го използвате, за да разберете типа на дадено поле.
Пример
Да предположим, че имаме колекция, наречена cats
със следния документ:
{ "_id" :ObjectId("60173c09c8eb4369cf6ad9e0"), "name" :"Scratch", "born" :ISODate("2021-01-03T23:30:15.123Z"), "weight" :30 /предварително>Можем да използваме следния код, за да върнем типовете на тези полета:
db.cats.aggregate( [ { $project: { _id: { $type: "$_id" }, name: { $type: "$name" }, born: { $type: "$born" }, weight: { $type: "$weight" } } } ] ).pretty()
Резултат:
{ "_id" :"objectId", "name" :"string", "born" :"date", "weight" :"double"}Пример 2
Ето още един пример, който съдържа различни полета с различни типове BSON.
Имаме колекция, наречена
types
със следния документ:{ "_id" :ObjectId("601738d7c8eb4369cf6ad9de"), "double" :123.75, "string" :"123", "boolean" :true, "date" :ISODate("2020-12-30:31:15.123Z"), "integer" :123, "long" :NumberLong(123), "decimal" :NumberDecimal("123.75"), "object" :{ "a" :1 }, "array" :[ 1, 2, 3 ]}За целите на тази статия наименувах всяко поле, за да отразява неговия тип BSON.
Вече можем да използваме следния код, за да върнем типовете на тези полета:
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()
Резултат:
{ "_id" :"objectId", "double" :"double", "string" :"string", "boolean" :"bool", "date" :"date", "integer" :"int ", "long" :"дълъг", "десетичен" :"десетичен", "object" :"обект", "масив" :"масив"}Филтриране по тип
Има и
$type
оператор за заявка за елемент, който ви позволява да филтрирате колекция от документи въз основа на тип BSON.Проверка за числа
Ако просто искате да проверите дали дадена стойност е число, вижте MongoDB
$isNumber
.