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 Codedb.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 Codedb.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 Codedb.users.find({ address: { $type: 10 } })
这将返回所有 address 字段的数据类型为 null 的文档:
jsonCopy Code{ "_id": 2, "username": "janedoe", "age": 25, "address": null }