MongoDB的数据类型

news2024/10/5 16:23:03

BSON

JSON作为一种轻量级的数据交换格式,JSON的可读性非常好,而且非常便于系统生成和解析,这些优势也让它逐渐取代了XML标准在Web领域的地位,当今许多流行的Web应用开发框架,如SpringBoot都选择了JSON作为默认的数据编/解码格式。
BSON由10gen团队设计并开源,目前主要用于MongoDB数据库。BSON(Binary JSON)是二
进制版本的JSON,其在性能方面有更优的表现。BSON在许多方面和JSON保持一致,其同样也支持
内嵌的文档对象和数组结构。二者最大的区别在于JSON是基于文本的,而BSON则是二进制(字节
流)编/解码的形式。在空间的使用上,BSON相比JSON并没有明显的优势。

类型

TypeNumberAliasNotes
Double1“double”
String2“string”
Object3“object”
Array4“array”
Binarydata5“binData”
Undefined6“undefined”Deprecated.
ObjectId7“objectId”对象ID,用于创建文档ID(一般是客户端生成的)
Boolean8“bool”
Date9“date”
Null10“null”
Regular Expression11“regex”正则表达式
DBPointer12“dbPointer”Deprecated.
JavaScript13“javascript”
Symbol14“symbol”Deprecated.
JavaScript code with scope15“javascriptWithScope”Deprecated in MongoDB
32-bitinteger16“int”
Timestamp17“timestamp”
64-bit integer18“long”
Decimal12819“decimal”New
Min key-1“minKey”表示一个最小值
Max key127“maxKey”表示一个最大值
db.books.find({"title" : {$type : 2}})
#或者
db.books.find({"title" : {$type : "string"}})

日期

MongoDB的日期类型使用UTC(Coordinated Universal Time)进行存储,也就是+0时区的时间。

test> db.dates.insertMany([{data1:Date()},{data2:new Date()},{data3:ISODate()}])
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("649bfdcb74d3e265a2c7b095"),
    '1': ObjectId("649bfdcb74d3e265a2c7b096"),
    '2': ObjectId("649bfdcb74d3e265a2c7b097")
  }
}
test> db.dates.find().pretty()
[
  {
    _id: ObjectId("649bfdcb74d3e265a2c7b095"),
    data1: 'Wed Jun 28 2023 17:30:51 GMT+0800 (中国标准时间)'
  },
  {
    _id: ObjectId("649bfdcb74d3e265a2c7b096"),
    data2: ISODate("2023-06-28T09:30:51.940Z")
  },
  {
    _id: ObjectId("649bfdcb74d3e265a2c7b097"),
    data3: ISODate("2023-06-28T09:30:51.940Z")
  }
]

ObjectId生成器

MongoDB集合中所有的文档都有一个唯一的_id字段,作为集合的主键。在默认情况下,_id字段
使用ObjectId类型,采用16进制编码形式,共12个字节。
大多数客户端驱动都会自行生成这个字段,比如MongoDB Java Driver会根据插入的文档是否包
含_id字段来自动补充ObjectId对象。这样做不但提高了离散性,还可以降低MongoDB服务器端的计
算压力。在ObjectId的组成中,5字节的随机数并没有明确定义,客户端可以采用机器号、进程号来实
现:
ObjectId

属性/方法描述
str返回对象的十六进制字符串表示。
ObjectId.getTimestamp()将对象的时间戳部分作为日期返回。
ObjectId.toString()以字符串文字“”的形式返回 JavaScript 表示ObjectId(…)。
ObjectId.valueOf()将对象的表示形式返回为十六进制字符串。返回的字符串是str属性

内嵌文档

复合对象类型

db.books.insert({
	title: "撒哈拉的故事",
	author: {
		name:"三毛",
		gender:"女",
		hometown:"重庆"
	}
})

查找

db.books.find({"author.name":"三毛"})

避免全部字段很大的情况,只返回指定的字段(图引):

db.books.find({"author.name":"三毛"},{title:1,tags:1})
# 只保留最后一个 tags
db.books.find({"author.name":"三毛"},{title:1,tags:{$slice:-1}})
# 包含多个元素的
db.books.find({tags:{$all:["伤感","想象力"]}})
## 查询子属性的
db.goods.find({tags:{$elemMatch:{tagKey:"color",tagValue:"黑色"}}})

修改

db.books.updateOne({"author.name":"三毛"},{$set:{"author.hometown":"重庆/台湾"}})
# 给数组添加元素
db.books.updateOne({"author.name":"三毛"},{$push:{tags:"猎奇"}})

固定大小的集合

test> db.createCollection("logs",{capped:true,size:4096,max:10})
{ ok: 1 }
test> for(var i=0;i<15;i++){
... db.logs.insert({t:"row-"+i})
... }
DeprecationWarning: Collection.insert() is deprecated. Use insertOne, insertMany, or bulkWrite.
{
  acknowledged: true,
  insertedIds: { '0': ObjectId("649c14eed4dd77c08d104166") }
}
test> db.logs.find()
[
  { _id: ObjectId("649c14eed4dd77c08d10415d"), t: 'row-5' },
  { _id: ObjectId("649c14eed4dd77c08d10415e"), t: 'row-6' },
  { _id: ObjectId("649c14eed4dd77c08d10415f"), t: 'row-7' },
  { _id: ObjectId("649c14eed4dd77c08d104160"), t: 'row-8' },
  { _id: ObjectId("649c14eed4dd77c08d104161"), t: 'row-9' },
  { _id: ObjectId("649c14eed4dd77c08d104162"), t: 'row-10' },
  { _id: ObjectId("649c14eed4dd77c08d104163"), t: 'row-11' },
  { _id: ObjectId("649c14eed4dd77c08d104164"), t: 'row-12' },
  { _id: ObjectId("649c14eed4dd77c08d104165"), t: 'row-13' },
  { _id: ObjectId("649c14eed4dd77c08d104166"), t: 'row-14' }
]

capped表示固定大小的集合
size表示集合的大小kb
最大的大小为10个

使用场景

固定集合很适合用来存储一些“临时态”的数据。“临时态”意味着数据在一定程度上可以被丢弃。同时,用户还应该更关注最新的数据,随着时间的推移,数据的重要性逐渐降低,直至被淘汰处
理。
一些适用的场景如下:系统日志,这非常符合固定集合的特征,而日志系统通常也只需要一个固定的空间来存放日志。在MongoDB内部,副本集的同步日志(oplog)就使用了固定集合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

007+limou+C语言基础排序算法(上)

0.前言 您好这里是limou3434的一篇博文&#xff0c;感兴趣可以看看我的其他内容。 排序算法简单理解就是&#xff1a;一串数组经过排序算法后得到有序的数组。排序算法在不同应用场景有不同的效果&#xff0c;因此我们有必要了解一些基础的排序算法。 而本次我给您带来的是一…

vue+leaflet实现聚合图(根据半径划分)

效果 官方示例 github地址 1. 安装leaflet.markercluster插件 npm install leaflet.markercluster -S** 2. 在项目中引入leaflet.markercluster和样式文件 ** import leaflet.markercluster/dist/MarkerCluster.css import leaflet.markercluster/dist/MarkerCluster.Def…

SqlServer定时执行存储过程

1.连接数据库后选择【SQL Server 代理】—【作业】——右键【新建作业】&#xff0c;具体操作如下图&#xff1a; 2.【新建作业】步骤如下图所示&#xff1a; 3.新建【步骤】&#xff0c;具体如下图所示&#xff1a; 4.新建【计划】&#xff0c;具体如下图所示&#xff1a; 6.配…

Ubuntu 20.04 下g++用不了,但是提示已经安装

问题描述 用sudo apt-get install g来安装&#xff0c;系统却又说g已经是最新版本了&#xff0c;但是用g -v查看又提示需要安装 g&#xff0c;如图片所示。 解决方法 未安装g&#xff0c;安装依赖只需运行命令行&#xff1a; sudo apt-get install build-essential仍然无法成…

docker部署redis

一、拉取镜像 docker search redis 我部署的是redis6.0&#xff0c;使用docker pull 拉取镜像 docker pull redis:6.0 拉取成功后使用docker image查看镜像 docker images | grep redis 二、创建挂载目录 在 /opt 目录下创建redis的 conf 和 data 目录 sudo mkdir /opt/re…

YOLOv5 环境安装

Windows11下yolov5环境配置系列教程&#xff08;基础部分&#xff09; Windows11下yolov5环境配置系列教程&#xff08;基础部分&#xff09;_wnowswolf的博客-CSDN博客 安装 Anaconda3 可以改为miniconda 占用更小 将安装目录下的Scripts和condabin文件夹的路径加入环境变…

linux重启网卡失败

[TO简单粗暴啊&#xff1a; RTNETLINK answers: File exists 这个报错&#xff0c;我看了一下网卡目录下出现了两个网卡配置文件&#xff0c;一个ens33&#xff0c;一个eth0。我本机是ens33&#xff0c;所以把eth0的删除了&#xff0c;就可以了。我这个是测试机器&#xff0c;…

人脸识别是什么?及人脸识别的流程

目录 1. 人脸识别是什么及应用场景2. 人脸识别的组成2.1 前端图像采集2.2 后端智能平台 3.人脸技术的流程3.1人脸检测3.2人脸对齐3.2.1仿射变换3.2.2对齐方法 3.3人脸编码&#xff08;提取特征向量&#xff09;3.4人脸分类 1. 人脸识别是什么及应用场景 人脸识别特指利用分析比…

什么是 frp内网穿透?快解析内网穿透如何实现远程办公?

1.什么是frp内网穿透 frp是一个开源、简洁易用、高性能的内网穿透和 反向代理软件&#xff0c;支持 tcp, udp, http, https等协议&#xff0c;虽然它体积轻量但功能很强大。它利用处于内网或防火墙后的机器&#xff0c;对外网环境提供 http 或 https 服务&#xff1b;对于 htt…

python项目在linux中的启动脚本(shell脚本)

背景&#xff1a; 在linux环境&#xff0c;使用shell脚本&#xff0c;实现对某个服务的启动、停止功能。 shell脚本的功能&#xff1a; 启动&#xff08;start&#xff09;&#xff1a;通过参数 start &#xff0c;实现启动服务。如果该服务已经启动&#xff0c;给出已经启动…

2023年江西省研究生数模竞赛国际“合作-冲突”的演化规律研究

2023年江西省研究生数模竞赛 国际“合作-冲突”的演化规律研究 原题再现 国家之间的“合作-冲突”行为具有复杂性和多变性&#xff0c;对其决策模式的研究有着重要的意义。例如&#xff0c;对国际冲突和危机的准确预测可以帮助决策者采取有效的措施来防止或缓解冲突&#xff…

都是全志T113处理器,“-i”和“-S3”有什么区别?

自9个月前&#xff0c;创龙科技“1片含税就79元”的全志T113-i双核ARM Cortex-A71.2GHz的工业核心板(SOM-TLT113)推出之后&#xff0c;不少嵌入式软硬件工程师、用户都咨询我们&#xff0c;究竟T113-i和T113-S3这两款处理器有什么区别&#xff1f;不同后缀型号的处理器&#xf…

嵌入式芯片启动过程全解析,彻底理解bootloader

当你按下电源开关的那一瞬间&#xff0c;第一行代码&#xff0c;是如何在芯片上运行起来的呢&#xff1f; 我们都知道嵌入式软件代码&#xff0c;是需要通过一定的方式&#xff0c;烧录在硬件芯片中才能运行&#xff0c;而我们所熟知的烧录方式&#xff0c;除了物理刻蚀以外&a…

数据分析知识图谱

在做数据分析时&#xff0c;经常会有这样的困扰&#xff1a;面对几种相似的方法&#xff0c;既不清楚它们各自的使用场景&#xff0c;也无法分清它们之间的差别&#xff0c;一念之差就可能选错方法。如果你也有这样的困扰&#xff0c;建议按照SPSSAU知识图谱目录顺序检索对应的…

【万字】一文教会你关于“生成对抗网络GAN”的所有知识

1 GAN基本概念 1.1 GAN介绍 GAN的英文全称是Generative Adversarial Network&#xff0c;中文名是生成对抗网络。它由两个部分组成&#xff0c;生成器和鉴别器&#xff08;又称判别器&#xff09;&#xff0c;生成网络&#xff08;Generator&#xff09;负责生成模拟数据&…

深度分析我国“智慧+”养老模式的发展情况

随着我国的老龄化人口结构的不断加深&#xff0c;传统旧的养老服务模式已经无法全面适应当前的养老市场的需求&#xff0c;因此需要寻求更加新型的、多元化的模式来解决老年人的不同层次的需求&#xff0c;“智慧”养老的服务模式从而成为了新养老产业发展的主要导向。 “智慧…

【1089. 复写零】

目录 一、题目解析二、算法原理三、代码实现 一、题目解析 二、算法原理 三、代码实现 class Solution { public:void duplicateZeros(vector<int>& arr){//找出最后一个数int dest-1,cur0;for(;;cur){if(arr[cur]){dest;}else{dest2;}if(dest>arr.size()-1){bre…

GPT-4:AI的新突破,重塑芯片设计领域

随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;其在各个领域的应用也日益广泛。最近&#xff0c;纽约大学Tandon工程学院的研究人员利用OpenAI的GPT-4模型&#xff0c;成功设计出了一个芯片&#xff0c;这标志着AI在硬件设计领域的重大突破。 GPT-4通过简单的英…

华为战略方法论:BLM模型之差距分析(限制版)

目录 说明 差距类型 1、业绩差距 2、机会差距 3、对标差距 专栏列表 个人简介 说明 今天就来谈谈 BLM 模型中的第一把钥匙&#xff0c;也就是差距分析。 从本质上来看。 BLM 模型中的差距与你在日常生活中听到或用到的差距在意义都是一样的。 不同之处就在于问题的复…

数据迁移工具,用这8种!

前言 最近有些小伙伴问我&#xff0c;ETL数据迁移工具该用哪些。 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 今天特地给大家汇总了一些目前…