MongoDB文档操作

3.3 文档操作
3.1 文档介绍

文档的数据结构和 JSON 基本一样。

所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

文档是一组键值(key-value)对(即 BSON),一个简单的文档例子如下:

{"id":1,"name":"goudan", "address":"beijing"}
3.2 MongoDB 数据类型

下表为MongoDB中常用的几种数据类型。

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

ObjectId

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

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

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

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

  • 最后三个字节是随机数

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

由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间:

> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2022-05-10T10:17:55Z")

ObjectId 转为字符串

> newObject.str
62a46bd34c256eb2b320f207
3.3 插入文档

MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)
或
db.collection.insertOne() 和 db.collection.insertMany()   #3.2 版本之后新增
或
db.COLLECTION_NAME.save(document)
  • save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne()db.collection.replaceOne() 来代替。

  • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

db.collection.insertMany() 用于向集合插入一个新文档,语法格式如下:

db.collection.insertMany([ <document 1> , <document 2>, ... ],   -- insertOne()时这儿就一个文档,不需要数组即可{writeConcern: <document>,ordered: <boolean>}
)

参数说明:

  • document:要写入的文档。

  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。

  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

写入案例

-- myTable中添加1个文档
> db.myTable.insert({"id":1,"name":"goudan", "address":"beijing"})
WriteResult({ "nInserted" : 1 })
​
-- myTable中添加1个文档
> db.myTable.insertOne({"id":2,"name":"mz", "address":"beijing"})
{"acknowledged" : true,"insertedId" : ObjectId("62a46e194c256eb2b320f209")
}
​
-- myTable中添加2个文档
> db.myTable.insertMany([{"id":3,"name":"shanjige", "address":"beijing"},{"id":4,"name":"haonan", "address":"jianshazui"}])
{"acknowledged" : true,"insertedIds" : [ObjectId("62a46e644c256eb2b320f20a"),ObjectId("62a46e644c256eb2b320f20b")]
}
​
-- myTable中添加1个文档
> db.myTable.save({"id":5,"name":"renzha", "address":"tangshan"})
WriteResult({ "nInserted" : 1 })
​
> db.myTable.find()
{ "_id" : ObjectId("62a46dee4c256eb2b320f208"), "id" : 1, "name" : "goudan", "address" : "beijing" }
{ "_id" : ObjectId("62a46e194c256eb2b320f209"), "id" : 2, "name" : "mz", "address" : "beijing" }
{ "_id" : ObjectId("62a46e644c256eb2b320f20a"), "id" : 3, "name" : "shanjige", "address" : "beijing" }
{ "_id" : ObjectId("62a46e644c256eb2b320f20b"), "id" : 4, "name" : "haonan", "address" : "jianshazui" }
{ "_id" : ObjectId("62a46eae4c256eb2b320f20c"), "id" : 5, "name" : "renzha", "address" : "tangshan" }

Guff_hys_python数据结构,大数据开发学习,python实训项目-CSDN博客

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

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

相关文章

输入日期,计算当前日期是这一年中的第几天(涉及闰年问题)

一、应用到的知识&#xff1a;闰年问题&#xff0c;数组&#xff0c;for循环&#xff0c;命令行参数&#xff0c;atoi函数 1. 闰年问题&#xff1a; 闰年 是指该年有366日&#xff0c;即较平常年份多出一日。每400年就会有一次闰年&#xff1b;或者年份是4的倍数&#xff0c;但…

【后端】拷贝数据字典

文章目录 前言逻辑前端创建复制弹窗引用复制弹窗打开复制弹窗后端定义【复制】控制器定义服务接口实现服务接口前言 一开始在设计单据状态的时候,是考虑了将所有单据状态的字典项全部规划好啦,但是实际使用,可能不同的业务其单据的字典项内容不同,例如客户要求的到货单单据…

Flowable-升级为7.0.0.M2-第二节

目录 替换变化的类和配置把javax.servlet 替换为 jakarta.servlet修改redis的配置配置logging.level.org.springframework.boot.autoconfigureerror避免影响视听 替换变化的类和配置 把javax.servlet 替换为 jakarta.servlet import javax.servlet.ServletContext; import ja…

【Qt-容器类】

Qt编程指南 ■ 顺序容器类■ QList■ QVector■ QLinkedList■ QStack■ QQueue ■ 关联容器类■ QSet■ QMap■ QMultiMap■ QHash■ QMultiHash ■ 顺序容器类 ■ QList QList 比较常用的容器类&#xff0c;以数组列表的形式实现&#xff0c;在前、后添加数据非常快。以下为…

SpringBoot操作world格式的文件与pdf格式的文件互转

文章目录 一、SpringBoot如何将pdf格式的文件流转换成world格式的文件流二、SpringBoot如何将world格式的文件转换成pdf格式的文件 一、SpringBoot如何将pdf格式的文件流转换成world格式的文件流 ​ 将 PDF 格式的文件流转换成 Word 格式的文件流是一个比较复杂的任务&#xf…

【Linux基础】9. 用户管理

文章目录 【 1. 用户基本管理 】1.1 useradd 添加用户1.2 passwd 更改用户密码1.3 su 切换用户1.4 userdel 删除用户 【 2. 用户的组 】2.1 more 查看系统所有组2.2 显示用户的组2.3 更改用户的组 【 3. 环境变量 】 【 1. 用户基本管理 】 1.1 useradd 添加用户 全称作用use…

【教程】使用ipagurd打包与混淆Cocos2d-x的Lua脚本

文章目录 摘要引言正文1. 准备工作2. 使用ipaguard处理Lua文件3. 运行ipagurd进行混淆代码加密具体步骤测试和配置阶段IPA 重签名操作步骤4. IPA重签名与发布 总结 摘要 本文将介绍如何使用ipagurd工具对Cocos2d-x中的Lua脚本进行打包与混淆&#xff0c;以及在iOS应用开发中的…

tekton 发布 kubernetes 应用

tekton 发布 kubernetes 应用 基于Kubernetes 服务部署 Tekton Pipeline 实例&#xff0c;部署完成后使用tekton来完成源码拉取、应用打包、镜像推送和应用部署。 本文实现一个 golang-helloworld 项目 CI/CD 的完整流程&#xff0c;具体包括以下步骤&#xff1a; 从 gitee…

css 超过一行/多行显示省略号... - 附示例

效果 1、超过一行 2、超过多行 - 以两行为例 二、示例代码 1、超过一行 margin: 20px; width: 50px; border: 1px solid red; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 2、超过多行 - 以两行为例 margin: 20px; width: 50px; border: 1px solid r…

【日常聊聊】年度总结

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 博客创作的初衷&#xff1a; 学到的技能&#xff1a; Java知识的深度掌握&#xff1a; Spring框架的应用和实践&#xff1a; 前端技…

Unity so文件的问题

文章目录 问题在面板上无法显示子节点如何保存继承于so的类必须放置在单个脚本so类文件名和类名要一致 问题 最近自己在写一个行为树出现一些问题记录一下首先NodeTree肯定是so文件但是node可以是单纯的类&#xff0c;也可以是so。后来我发现只能是so 在面板上无法显示 第一…

linux 网络工具(二)

linux 网络工具 1. ip命令簇4.1 address4.2 link4.3 route4.4 rule 2. 其他常用命令2.1 ifup/ifdown2.2 配置主机名2.3 设置DNS服务器指向2.4 配置域名解析2.5 ss2.6 路由相关配置文件2.7 查看机器可用端口2.8 traceroute2.9 dhclient 1. ip命令簇 Linux的ip命令和ifconfig类似…

asp.net core webapi AutoMapper使用

1.AutoMapper介绍&#xff1a; AutoMapper是一个.NET库&#xff0c;用于简化对象之间的映射。它可以帮助开发人员在不同类型之间进行自动转换&#xff0c;从而减少重复的手动映射代码。 使用AutoMapper&#xff0c;开发人员可以定义映射规则&#xff0c;然后该库会自动执行对…

Mybatis-Plus基础之Mapper增删改

文章目录 一、普通增删改普通新增普通删除根据 entity 条件&#xff0c;删除记录根据 ID 批量删除根据 ID 删除根据 columnMap 条件&#xff0c;删除记录 普通修改根据 whereWrapper 条件&#xff0c;更新记录根据 ID 修改 二、insert ID 主键回填三、条件删除&#xff1a;使用…

【C语言学习疑难杂症】第12期:如何从汇编角度深入理解y = (*--p)++这行代码(易懂版)

对于如下代码,思考一下输出结果是什么? int a[] = {5, 8, 7, 6, 2, 7, 3}; int y, *p = &a[1]; y = (*--p)++; printf("%d ",y); printf("%d",a[0]); 这个代码看似简单,但是在“y = (*--p)++;”这行代码里,编译器做了很多工作。 我们在vs2022的…

系列十七(面试)、请你谈谈RocketMQ的消息丢失问题

一、RocketMQ的消息丢失问题 1.1、概述 生产环境中为了保证服务的高可用&#xff0c;一般情况下都是采用集群的方式&#xff0c;RocketMQ也不例外&#xff0c;另外现在企业级的开发基本都是分布式微服务的模式&#xff0c;这就存在着跨网络传输数据的问题&#xff0c;而网络传…

促进软件开发团队创新的方法和团队协作原则

在迅速发展的科技领域&#xff0c;创新成为软件开发团队不可或缺的一部分。为了在竞争激烈的市场中保持竞争力&#xff0c;团队需要采用创新的方法&#xff0c;并建立一种积极的团队协作文化。本文将探讨一些促进软件开发团队创新的方法和团队协作原则。 1. 鼓励创意和实验 为团…

qt中实现鼠标拖动一张图片到qt控件内,图片自动在控件中展示

很多电脑软件都有鼠标拖动一张图片或者拖动一个文件到软件的指定区域内&#xff0c;就可以自动在软件中显示图片内容或者文件内容。qt中也可以这样实现。 本文介绍两种方法&#xff1a; 1、只可以以非管理员的身份运行软件时&#xff0c;才可以实现上述功能。 mainwindow.h#…

orangepi--开发板配置网络SSH登录

常用指令&#xff1a; ifconfig-------------------------------------查看网络地址 sudo passwd orangepi-------------------------改密码 nmcli dev wifi-------------------------------查看wifi nmcli dev wifi connect xx password xx--------连接网络 ip addr show wla…

【PTA】L1-016 验证身份(C++)

题目链接 &#xff1a; 题目要求&#xff1a; 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下&#xff1a; 首先对前17位数字加权求和&#xff0c;权重分配为&#xff1a;{7&#xff0c;9&#xff0c;10&#xff0c;5&#xff0…