MongoDB $typeOpérateur

Dans MongoDB,$typel'opérateur est utilisé pour interroger les documents dont les champs ont un type spécifié.

L'opérateur $type de MongoDB est utilisé pour interroger le type de données BSON des champs.

Il permet de spécifier un ou plusieurs types et renvoie les documents correspondant à ces types.

Voici une introduction détaillée et des exemples de l'opérateur $type.

Syntaxe :

db.collection.find({ field: { $type: <type> } })
  • field: le champ dont le type doit être vérifié.
  • type: le type BSON spécifié, qui peut être un code numérique du type ou une chaîne du nom du type.

Types BSON

Voici les types BSON courants et leurs codes numériques et noms de chaîne correspondants :

Code de typeNom de type
1double
2string
3objet
4array
5binData
6undefined
7objectId
8bool
9date
10null
11regex
12dbPointer
13javascript
14symbole
15javascriptWithScope
16int
17timestamp
18long
19decimal
255minKey
127maxKey

Exemple

Trouver les documents dont le type de champ est une chaîne de caractères :

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

Ou utiliser le code de type :

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

Trouver les documents dont le type de champ est un nombre, par exemple, trouver les documents où le type du champ age est un entier :

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

Ou utiliser le code de type :

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

Trouver les documents dont le type de champ est un booléen :

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

Ou utiliser le code de type :

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

Trouver les documents dont le type de champ est une date :

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

Ou utiliser le code de type :

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

Trouver les documents dont le type de champ est l'un de plusieurs types, par exemple, trouver les documents où le type du champ value est une chaîne de caractères ou un entier :

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

Ou utiliser le code de type :

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

Trouver les documents où le type du champ details est un objet et le type du champ score est un nombre à virgule flottante à double précision :

Exemple

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

Ou utiliser le code de type :

Exemple

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

En utilisant l'opérateur $type, vous pouvez interroger précisément le type de données de champs spécifiques dans les documents, ce qui permet d'effectuer un filtrage et une gestion plus fins des données.


Plus d’exemples

La base de données que nous utilisons s'appelle "example" et notre collection s'appelle "col". Voici les données que nous avons insérées.

Collection simple "col" :

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

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

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

Utilisez la commande find() pour afficher les données :

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

Opérateur MongoDB - Exemple $type

Si vous souhaitez obtenir les données où title est de type String dans la collection "col", vous pouvez utiliser la commande suivante :

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

Le résultat de sortie est:

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