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 }