知识点

软件工具

相关文章

更多

最近更新

更多

MongoDB数据类型

2019-03-15 21:44|来源: 网络

MongoDB的文件存储格式为BSON,同JSON一样支持往其它文档对象和数组中再插入文档对象和数组,同时扩展了JSON的数据类型.与数据库打交道的那些应用。例如,JSON没有日期类型,这会使得处理本来简单的日期问题变得非常繁琐。只有一种数字类型,没法区分浮点数和整数,更不能区分32位和64位数字。也没有办法表示其他常用类型,如正则表达式或函数。

数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer

整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位

32位整数  类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。

64位整数  不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数,

Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Array 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于内嵌文档。
Null 用于创建空值。表示空值或者不存在的字段。 {"x":null}
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储 JavaScript 代码。
Regular expression 正则表达式类型。用于存储正则表达式。


关键类型说明:

1、ObjectId

ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:

1559617643826.png

 

MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象

1、前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时

2、接下来的 3 个字节是机器标识码

3、紧接的两个字节由进程 id 组成 PID

4、最后三个字节是随机数


2、时间戳

BSON 有一个特殊的时间戳类型,与普通的日期类型不相关。时间戳值是一个 64 位的值。其中:在单个 mongod 实例中,时间戳值通常是唯一的。

1、前32位是一个 time_t 值【与Unix新纪元(1970年1月1日)相差的秒数】

2、后32位是在某秒中操作的一个递增的序数


3、日期

表示当前距离 Unix新纪元(1970年1月1日)的毫秒数。日期类型是有符号的, 负数表示 1970 年之前的日期。


相关问答

更多
  • mongodb集群问题[2021-11-30]

    1. 每一个启动的mongod都是实际存放数据的地方,都能作为别人的sharding 2. 分片部署需要一个mongos,起路由分发的作用;需要一个配置服务器和若干个分片服务器(都是mongod) 3. 单机的时候,应用连接的是mongod;分布式的时候,应用连接的是mongos。 最简单的分片部署是单个的配置服务器,一个config(即mongod),一个mongos,几个sharding(即mongod):
  • 但是,使用MongoDB,我可以将6个表取消规格化并将其平整为2个表/集合,并将我的查询最小化为可能只有1个查询 但是,您可以使用单个适当制作的SQL语句轻松向MySQL查询与单个博客文章相关的6个表格值得信息。 然而硬盘空间比CPU /服务器便宜。 如果性能和扩展性是重中之重,那么您将需要关注的是拥有足够的内存来适应主内存和足够的CPU内核来运行查询。 企业级RAID 10阵列是必需的,不要误解我的意思,但只要您的数据库软件(MongoDB或MySQL)需要扫描一个不适合主内存的索引,您将面临的是一个世界 ...
  • 尝试mongoose - npm install mongoose ,mongoose是mongodb的ODM。 API文档 - http://mongoosejs.com/ 官方文档中的简短示例: var mongoose = require('mongoose'); mongoose.connect('localhost', 'test'); var schema = mongoose.Schema({ name: 'string' }); var Cat = mongoose.model('Cat' ...
  • db.users.find( { $or:[{ 'social.privacy': true },{'personal.privacy': true}] ) db.users.find( { $or:[{ 'social.privacy': true },{'personal.privacy': true}] )
  • 不需要每次集合更新时都不需要运行它。 根据config中的刷新间隔刷新索引,或者通过调用“_refresh”手动刷新索引 是的,支持分页,使用字段“从”,“大小”,“排序”排序查询请参阅 ElasticSearch分页和排序 是的,你可以在任何领域搜索,请参阅http://www.elasticsearch.org/guide/reference/query-dsl/query-string-query/ no you need not run that every time a collection ge ...
  • 默认情况下,Mongo将其所有数据库文件存储在已配置的dbdir目录的根目录中。 如果希望Mongo为每个数据库创建单独的目录并将数据库文件放在其中,请查看directoryperdb配置选项。 如果尚未创建默认数据目录/data/db需要创建它。 你可以通过shell在Ubuntu中做到这一点: CTL+ALT+T出一个终端窗口: cd / sudo mkdir /data cd data sudo mkdir db 注意:您可能还需要更改您拥有的新目录的所有权: sudo chown your_use ...
  • 从第一个终端 ./mongod --port 27017 从另一个 ./mongo --port 27017 假设在两个终端中你都在mongo可执行目录中。 根据需要更改端口。 另外ctrl + C不是问题,我总是用那个来关闭。 From first terminal ./mongod --port 27017 From another one ./mongo --port 27017 Assuming in both terminals you are in mongo executable di ...
  • 下面是使用Manager API进行查询的正确方法。 它无权访问数据库对象。 http://php.net/manual/en/class.mongodb-driver-manager.php 这是一个例子 $connection = new MongoDB\Driver\Manager("mongodb://localhost:27017"); $id = new \MongoDB\BSON\ObjectId(SomeId); $filter = ['_id' => $id ...
  • 选项1:坚持使用BsonId并使用Facade模式 [BsonId]属性是你用来表示_id属性应该链接到一个特定的属性。 没有办法解决这个问题(完全忽略你的crud操作中的_id,这似乎是一个糟糕的主意)。 所以,如果你想将你的“实体”对象从“数据层”中分离出来,那么就使用一个poco类。 - 使用poco课程替代记录。 该类仅用于数据存储:快速获取mongo数据的方法,以及与bson文档一起工作的绝佳选择。 - 在您的实体层上使用该poco类的门面 。 我不觉得重新发明轮子很有用,所以我通常会问我们的开发 ...
  • 每当我有一个mySQL或SQL Server数据库时,总是建议我远程运行它 相同或不同的服务器。 它们都不能保证您的安全问题 。 最大的问题是性能。 可扩展性。 水平扩展数据库服务器非常困难,但MongoDB的体系结构内置了对水平可伸缩性的支持 。 回到MongoDB安全性。 太多好的答案了。 这是相关链接: MongoDB安全概念 MongoDB安全教程 如何保护MongoDB实例? 提高MongoDB安全性的10个技巧 我使用不同的环境。 一个在我的本地机器上进行开发,一个在我的生产服务器上。 而MEA ...