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 tipo | Nombre de tipo |
|---|---|
| 1 | double |
| 2 | string |
| 3 | object |
| 4 | array |
| 5 | binData |
| 6 | undefined |
| 7 | objectId |
| 8 | bool |
| 9 | date |
| 10 | null |
| 11 | regex |
| 12 | dbPointer |
| 13 | javascript |
| 14 | symbol |
| 15 | javascriptWithScope |
| 16 | int |
| 17 | timestamp |
| 18 | long |
| 19 | decimal |
| 255 | minKey |
| 127 | maxKey |
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
$and: [
{ details: { $type: "object" } },
{ score: { $type: "double" } }
]
})
O usar el código de tipo:
Ejemplo
$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