MongoDB $typeOperador

En MongoDB,$typeel operador se utiliza para consultar documentos que tengan campos con el tipo especificado.

El operador $type de MongoDB se utiliza para consultar el tipo de dato BSON de un campo.

Le permite especificar uno o más tipos y devuelve los documentos que coinciden con esos tipos.

A continuación se presenta una introducción detallada y ejemplos del operador $type.

Sintaxis:

db.collection.find({ field: { $type: <type> } })
  • field: el campo cuyo tipo se va a comprobar.
  • type: el tipo BSON especificado, puede ser un código numérico de tipo o una cadena con el nombre del tipo.

Tipo BSON

Los siguientes son tipos BSON comunes y sus códigos numéricos y nombres de cadena correspondientes:

Código de tipoNombre de tipo
1double
2string
3object
4array
5binData
6undefined
7objectId
8bool
9date
10null
11regex
12dbPointer
13javascript
14symbol
15javascriptWithScope
16int
17timestamp
18long
19decimal
255minKey
127maxKey

Ejemplo

Buscar documentos donde el campo sea de tipo cadena (string):

db.myCollection.find({ fieldName: { $type: "string" } })

O usar el código de tipo:

db.myCollection.find({ fieldName: { $type: 2 } })

Buscar documentos donde el campo sea de tipo numérico, por ejemplo, buscar documentos donde el campo age sea de tipo entero:

db.myCollection.find({ age: { $type: "int" } })

O usar el código de tipo:

db.myCollection.find({ age: { $type: 16 } })

Buscar documentos donde el campo sea de tipo booleano:

db.myCollection.find({ isActive: { $type: "bool" } })

O usar el código de tipo:

db.myCollection.find({ isActive: { $type: 8 } })

Buscar documentos donde el campo sea de tipo fecha:

db.myCollection.find({ createdAt: { $type: "date" } })

O usar el código de tipo:

db.myCollection.find({ createdAt: { $type: 9 } })

Buscar documentos donde el campo sea de varios tipos, por ejemplo, buscar documentos donde el campo value sea de tipo cadena o entero:

db.myCollection.find({ value: { $type: ["string", "int"] } })

O usar el código de tipo:

db.myCollection.find({ value: { $type: [2, 16] } })

Buscar documentos donde el campo details sea de tipo objeto y el campo score sea de tipo doble (double):

Ejemplo

db.myCollection.find({
    $and: [
        { details: { $type: "object" } },
        { score: { $type: "double" } }
    ]
})

O usar el código de tipo:

Ejemplo

db.myCollection.find({
    $and: [
        { details: { $type: 3 } },
        { score: { $type: 1 } }
    ]
})

Mediante el uso del operador $type, puede consultar con precisión el tipo de dato de campos específicos en los documentos, logrando así un filtrado y gestión de datos más granulares.


Más ejemplos

La base de datos que usamos se llama "ejemplo" y nuestra colección se llama "col". A continuación se muestran los datos que insertamos.

Colección simple "col":

>db.col.insert({
    title: 'PHP 教程', 
    description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。',
    by: 'Ejemplo',
    url: 'http://www.example.com',
    tags: ['php'],
    likes: 200
})

>db.col.insert({title: 'Java 教程', 
    description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
    by: 'Ejemplo',
    url: 'http://www.example.com',
    tags: ['java'],
    likes: 150
})

>db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: 'Ejemplo',
    url: 'http://www.example.com',
    tags: ['mongodb'],
    likes: 100
})

Use el comando find() para ver los datos:

> db.col.find()
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "Ejemplo", "url" : "http://www.example.com", "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "Ejemplo", "url" : "http://www.example.com", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "Ejemplo", "url" : "http://www.example.com", "tags" : [ "mongodb" ], "likes" : 100 }

MongoDB Operador - Ejemplo de $type

Si desea obtener los datos donde title es de tipo String en la colección "col", puede usar el siguiente comando:

db.col.find({"title" : {$type : 2}})
o 
db.col.find({"title" : {$type : 'string'}})

El resultado es:

{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "Ejemplo", "url" : "http://www.example.com", "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "Ejemplo", "url" : "http://www.example.com", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "Ejemplo", "url" : "http://www.example.com", "tags" : [ "mongodb" ], "likes" : 100 }
Otras extensiones