MongoDB $type 操作符学习笔记

简介

在 MongoDB 中,$type 操作符用于通过数据类型来查询集合中的文档。可以使用 $type 操作符来过滤具有特定数据类型的字段,或者查找一个不存在或为空值的字段。

语法

jsonCopy Code
{ field: { $type: <BSON type> } }

其中 <BSON type> 可以是以下数据类型之一:

  • double (1)
  • string (2)
  • object (3)
  • array (4)
  • binData (5)
  • undefined (6) - 已弃用
  • objectId (7)
  • bool (8)
  • date (9)
  • null (10)
  • regex (11)
  • dbPointer (12) - 已弃用
  • javascript (13)
  • symbol (14) - 已弃用
  • javascriptWithScope (15)
  • int (16)
  • timestamp (17)
  • long (18)
  • decimal (19)
  • minKey (255)
  • maxKey (127)

示例

查找某个字段的数据类型

假设我们有一个名为 users 的集合,其中包含以下文档:

jsonCopy Code
{ "_id": 1, "username": "johndoe", "age": 30 } { "_id": 2, "username": "janedoe", "age": 25, "address": { "city": "New York", "state": "NY" } } { "_id": 3, "username": "bobsmith", "age": 40, "active": true } { "_id": 4, "username": "amandawhite", "age": 35, "interests": ["music", "sports"] }

如果我们想要查找 users 集合中所有 age 字段的数据类型,可以使用以下查询:

jsonCopy Code
db.users.find({ age: { $type: "int" } })

这将返回所有 age 字段的数据类型为 int 的文档:

jsonCopy Code
{ "_id": 1, "username": "johndoe", "age": 30 } { "_id": 2, "username": "janedoe", "age": 25 } { "_id": 3, "username": "bobsmith", "age": 40 } { "_id": 4, "username": "amandawhite", "age": 35 }

查找某个字段不存在或为空值

如果我们想要查找 users 集合中所有没有 address 字段或 address 字段为空值的文档,可以使用以下查询:

jsonCopy Code
db.users.find({ address: { $exists: false } })

这将返回所有没有 address 字段的文档:

jsonCopy Code
{ "_id": 1, "username": "johndoe", "age": 30 } { "_id": 3, "username": "bobsmith", "age": 40, "active": true } { "_id": 4, "username": "amandawhite", "age": 35, "interests": ["music", "sports"] }
jsonCopy Code
db.users.find({ address: { $type: 10 } })

这将返回所有 address 字段的数据类型为 null 的文档:

jsonCopy Code
{ "_id": 2, "username": "janedoe", "age": 25, "address": null }