MongoDB 数据类型查询 — $type使用

MongoDB 数据类型查询 — $type使用

MongoDB 使用过程中经常需要根据字段的类型来查询数据, 而MongoDB中查询字段类型是通过$type操作符来实现.

$type使用法语:

db.集合名.find({$type:类型值});    //这里的类型值能使用Number也能使用alias
  • 举个例子:
db.person.find({address:{$type:2}});         //查询address字段数据类型为字符串
db.person.find({address:{$type:"string"}});  //查询address字段数据类型为字符串
  • 复杂些的
db.person.find({address:null});             //注意,这样查询会将没有 address 列的数据一并查询出来
db.person.find({address:{$exists:true, $eq:null}}); //这样查询的是 address 列值为null 的数据
db.person.find({address:{$type:10}});      //这样查询的是 address 列值为null 的数据
  • python 代码
{'number': {'$type': 18}} 

$type 有效的类型值,如下:

NumberAliasType
1“double”Double
2“string”String
3“double”Object
4“array”Array
5“binData”Binary data
6“undefined”Undefined
7“objectId”ObjectId
8“bool”Boolean
9“date”Date
10“null”Null
11“regex”Regular Expression
12“dbPointer”DBPointer
13“javascript”JavaScript
14“symbol”Symbol
15“javascriptWithScope”JavaScript (with scope)
16“int”32-bit integer
17“timestamp”Timestamp
18“long”64-bit integer
19“decimal”Decimal128
-1“minKey”Min key
127“maxKey”Max key

转载于 https://www.cnblogs.com/YWDCB/p/9453887.htm

<think>好的,我现在需要回答用户关于MongoDB支持的数据类型的问题。首先,我得回忆一下MongoDB数据类型,确保自己记得准确。MongoDB作为文档数据库使用BSON格式存储数据,而BSON支持多种数据类型。用户可能想知道这些类型有哪些,以及它们的用途,所以我需要详细列举并解释每个类型。 首先,常见的基本类型,比如字符串、整数、浮点数、布尔值这些肯定有的。然后是ObjectId,这是MongoDB文档的唯一标识符,每个文档都有一个_id字段,默认是ObjectId类型,这点很重要,必须提到。 接下来是日期类型,Date,存储日期和时间。数组类型,允许在一个字段中存储多个值,这也是文档数据库的优势之一。内嵌文档,也就是嵌套的对象结构,可以包含其他文档,这对于复杂数据模型很有用。 然后是二进制数据,BinData,用于存储图片、文件等二进制内容。还有正则表达式类型,RegEx,可以直接在查询使用正则表达式。其他可能不太常用的类型,比如JavaScript代码、Symbol(已弃用)、时间戳Timestamp,用于内部记录操作时间,以及Decimal128,高精度浮点数,适用于金融计算需要精确性的场景。 还需要提到Null类型,用于表示空值。地理空间类型,如Point、LineString等,支持地理位置查询,这在处理地图相关数据时很重要。还有Min Key和Max Key,用于比较操作中的最小和最大值。 可能需要注意区分一些容易混淆的类型,比如Timestamp和Date的不同之处。Timestamp是内部使用的,而Date是通用的日期时间类型。另外,Decimal128和Double的区别在于精度,前者更精确,适合财务数据,后者是双精度浮点数,适用于科学计算但可能有精度损失。 还要检查是否有遗漏的数据类型,比如Object、Boolean、Number(包括整数和浮点数),是否需要分开说明。MongoDB的Number默认是64位,可能根据数值自动选择整数或浮点数,但用户可能需要知道具体如何处理。 最后,是否需要举例说明某些类型的应用场景,比如使用内嵌文档来避免多表关联,或者使用数组存储标签等。这能帮助用户更好地理解何时使用哪种类型。 现在需要组织这些信息,结构清晰,分点说明,每个数据类型给出名称、对应的BSON别名(如果有的话)、用途和例子。同时,要符合用户的要求,使用中文,行内公式用$...$,独立公式用$$...$$,但这里可能不太涉及数学公式,但如果有相关的例子可能需要用到,比如存储数值类型时,但用户的问题主要是数据类型,可能不需要太多公式。不过如果有涉及数值范围或计算的例子,可能需要使用LaTeX格式。 检查是否有错误,比如是否真的存在某个类型,比如Decimal128的正确性,以及Timestamp的使用场景。确认所有信息都是最新的,因为MongoDB可能会更新其支持的类型。例如,旧版本可能有不同的类型,但目前最新的稳定版本支持哪些,需要确认。 总结一下,应该先列出所有支持的数据类型,每个类型给出简要说明和示例,可能的话说明使用场景。确保覆盖全面,结构清晰,帮助用户理解MongoDB的灵活性和适用场景。</think>MongoDB 使用 **BSON(Binary JSON)** 格式存储数据,支持丰富的数据类型以满足不同场景需求。以下是主要数据类型的分类及说明: --- ### **1. 基本数据类型** - **字符串(String)** - BSON 别名:`string` - 示例:`{ "name": "Alice" }` - 注意:必须使用 UTF-8 编码。 - **数值类型** - **整数(32/64位)** - BSON 别名:`int`(32位)、`long`(64位) - 示例:`{ "age": 25 }`(自动识别为 `int`) - **浮点数(Double)** - BSON 别名:`double` - 示例:`{ "price": 19.99 }` - **高精度小数(Decimal128)** - BSON 别名:`decimal` - 适用场景:金融计算(避免浮点误差)。 - 示例:`{ "balance": NumberDecimal("1234.5678") }` - **布尔值(Boolean)** - BSON 别名:`bool` - 示例:`{ "isActive": true }` - **空值(Null)** - BSON 别名:`null` - 示例:`{ "comment": null }` --- ### **2. 复合与嵌套类型** - **对象(内嵌文档)** - BSON 别名:`object` - 说明:嵌套 JSON 结构,支持层级数据。 - 示例: ```json { "address": { "city": "Beijing", "zip": "100000" } } ``` - **数组(Array)** - BSON 别名:`array` - 说明:存储有序元素列表,元素类型可混合。 - 示例:`{ "tags": ["mongodb", "nosql", 100] }` --- ### **3. 特殊标识与时间** - **ObjectId** - BSON 别名:`objectId` - 说明:12 字节的唯一标识符,默认用于 `_id` 字段。 - 示例:`{ "_id": ObjectId("507f191e810c19729de860ea") }` - **日期(Date)** - BSON 别名:`date` - 说明:存储 UTC 时间(毫秒级精度)。 - 示例:`{ "createdAt": ISODate("2023-10-01T00:00:00Z") }` - **时间戳(Timestamp)** - BSON 别名:`timestamp` - 说明:内部使用,记录操作时间(如分片集群)。 - 示例:`{ "log": Timestamp(1696147200, 1) }` --- ### **4. 二进制与编码类型** - **二进制数据(BinData)** - BSON 别名:`binData` - 适用场景:存储图片、加密数据等。 - 示例:`{ "file": BinData(0, "SGVsbG8gd29ybGQ=") }`(Base64 编码) - **正则表达式(Regular Expression)** - BSON 别名:`regex` - 示例:`{ "pattern": /^mongodb/i }` --- ### **5. 地理空间类型** - **点(Point)** - 示例:`{ "location": { type: "Point", coordinates: [116.4, 39.9] } }` - **线(LineString)**、**多边形(Polygon)** - 适用场景:地图应用、范围查询(如 `$geoWithin`)。 --- ### **6. 其他类型** - **JavaScript 代码** - BSON 别名:`javascript`(带/不带作用域)。 - 示例:`{ "script": function() { /* ... */ } }` - **Min Key / Max Key** - 说明:比较操作中的最小/最大值。 - 示例:`{ "rank": MinKey() }` --- ### **总结** MongoDB数据类型设计兼顾灵活性与功能性,例如: - 使用 **内嵌文档** 和 **数组** 简化关联数据存储。 - **Decimal128** 避免金融计算误差,**地理空间类型** 支持位置查询。 - **BinData** 和 **ObjectId** 满足二进制数据与唯一标识需求。 具体类型可通过 `$type` 操作符验证,例如: ```javascript db.collection.find({ "field": { $type: "string" } }) // 查询字符串类型字段 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值