《MongoDB》Mongo Shell中基本操作-ObjectId和文档创建详解

news2025/1/24 14:51:18

前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~
主页: oliver尹的主页
格言: 跌倒了爬起来就好~
来个关注吧,点个赞吧,谢谢

《MongoDB》Mongo Shell中基本操作-ObjectId和文档创建详解

  • 一、简介
  • 二、内容概述
  • 三、文档主键 _id
    • 3.1 通过ObjectId获取时间信息
    • 3.2 将ObjectId转成字符串
  • 四、数据库操作
    • 4.1 数据库
    • 4.2 显示数据库中的文档集合
  • 五、创建文档
    • 5.1 db.collection.insertOne()
    • 5.2 db.collection.insertMany()
    • 5.3 db.collection.insert()
    • 5.4 db.collection.save()
  • 六、小结

一、简介

本篇记录备份的是Mongo DB的一些基础知识,包括文档长什么样子,Mongo Shell中的CRUD这四种基本操作,什么是CRUD?C(Creadt、创建)R(Read、读取)U(Update、更新)D(Delete、删除),人话就是增、删、改、查等等;
注意,本文中的示例命令都是基于Mongo Shell的,并不是直接运行在类似于node代码中的~

二、内容概述

本文主要分享的内容是什么是文档主键,以及如何通过insertOne(),insertMany(),insert(),save()命令创建文档,具体内容如下:
在这里插入图片描述

三、文档主键 _id

MongoDB中每一个文档都有一个自己独一无二的主键,这个和传统的关系型数据库没有区别,当然,在不设定的情况下文档的主键是MongoDB自动生成的,这种默认主键也是我们日常开发中最常用的,称作为 对象主键 也就是 ObjectId,看个例子,大概就是长这个样子:

{
	_id: new ObjectId("620327ed5a4fe9fe824daa24"),
	username: "demo"
}

在这里插入图片描述
第一个问题来了,这个文档主键有什么用?

  • 第一个作用就是用于 区分文档,举个例子,比如有两条数据一摸一样,所有字段的值均相同,当然实际情况肯定不会这么干,如果真有这种情况,那么就要考虑是不是代码有问题了,这里只是假设,如果两条数据一摸一样,怎么区分哪条是哪条,这个时候主键的作用就出来了,它是具有 唯一性 的,能为文档做出区分;
  • 第二个作用是为了 索引,这个我们后面再说,_id这个字段将自动编入索引,通过索引,在大数据量的时候可以快速的帮助我们查询到我们需要的数据,提高查询效率;其次,这个ObjectId,它是有意义的,长度为12个字节,其中 前四个字节代表的是文档的创建时间,如果我们想通过ObjectId获取时间信息,那么我们可以这么做:

3.1 通过ObjectId获取时间信息

new ObjectId("620327ed5a4fe9fe824daa24").getTimestamp()

以node为例,我们假设这个admin就是最终查询到的数据,那么我们只需要这么写即可

admin._id.getTimestamp()

最终会得到一个类似于这种值的结果

2022-02-09T02:33:17.000Z

也就是说正常情况下,其实我们没有必要存储当前这条数据的录入时间,这个录入时间完全可以通过ObjectId来获取,当然,这个也是需要根据写的时候的实际情况来看的~

3.2 将ObjectId转成字符串

在某些场景下,可能会说我需要 将ObjectId转成字符串,那么可以通过如下方式获取

new ObjectId("620327ed5a4fe9fe824daa24").valueOf()

以node为例,我们假设这个admin就是最终查询到的数据,那么我们只需要这么写即可

admin._id.valueOf()

最终会得到一个类似于这种值的结果

620327ed5a4fe9fe824daa24

四、数据库操作

4.1 数据库

在Mongo Shell中通过命令 use 切换数据库,比如

use test

得到结果如下
在这里插入图片描述

这代表在当前的Mongo Shell中已经切换到数据库test了,如果不存在test数据库,那么会创建一个名为test的数据库并且切换到test数据库

4.2 显示数据库中的文档集合

使用 show collections 可以查看当前数据库中的数据

show collections

如果提示:Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus,代表权限不够,需要首先登陆

五、创建文档

5.1 db.collection.insertOne()

创建单个文档,具体模版如下:

db.<collection>.inserOne(
  <document>,
    {
      writeConcern:<document>
    }
)
  • collection: 代表集合的名字;
  • document: 要添加的文档;
  • writeConcern: 这个是安全写的级别,简单的说 安全写级别用来代表一次数据库写入操作这个过程的安全级别级别越高,丢失数据的风险就越低代价是写入的操作越慢,因此有利有弊,如果不写,mongoDB使用默认的安全写级别,一般情况下,默认级别就够了;

以上方的这个模版为例,看一个具体的示例:

db.test.insertOne({
	name:"oliver",
	age:18,
})

简单说明:在test这个集合中写入了一条数据,这条数据有两个字段,分别是 nameage,值分别为oliver18;注意的是,在保存数据的时候,MongoDB会自动帮我们生成一个 主键_id 添加进我们待存储的这个文档一起存进test;

5.2 db.collection.insertMany()

创建多个文档,举个例子,假设现在前端传递了一组数据,共10条道后端,如果使用insertOne,那么我们需要执行10次,肯定不合理,因此需要一次性存储10条进集合,模版如下:

db.<collection>insertMany(
  	[<document1>,<document2>,...,<document10>],
    {
      writeConcern:<document>,
      ordered:<bnoolean>
    }
)
  • collection: 代表集合的名字;
  • [document1,document2,…,document10]: 要添加的文档,与insertOne不同,该参数为一个数组,数组的每一项是一个待添加的文档;
  • writeConcern: 这个是安全写的级别,与insertOne一致;
  • ordered: 是否按顺序写入文档,默认为true,如果设置成false,那么将允许MongoDB打乱文档顺序写入,以便优化写入性能;
db.test.insertMany([
{
	name:"oliver",
	age:18,
},{
	name:"oliver1",
	age:19,
}
])

值得注意的是,在顺序写入的状态下,一旦发生错误,那么后续的数据将会被终止写入,在报错信息中,我们可以通过 nInserted这个字段观察最终写入的结果,存在几篇文档写入成功
在这里插入图片描述

如图所示,0,代表在顺序写入的情况下,第一篇就报错了,或者打乱顺序的情况下,所有数据都没有写入成功~

5.3 db.collection.insert()

创建单个或者多个文档,简单的说就是 **insertOne **和 **insertMany **的集合;

db.<collection>insertMany(
  	<document or array of document>,
    {
      writeConcern:<document>,
      ordered:<bnoolean>
    }
)
  • collection: 代表集合的名字;
  • document or array of document: 要添加的文档,可以是一个对象,或者是一个数组;
  • writeConcern: 这个是安全写的级别,与insertOne一致;
  • ordered: 是否按顺序写入文档,默认为true,如果设置成false,那么将允许MongoDB打乱文档顺序写入,以便优化写入性能;

具体示例如下

// 多个
db.test.insert([
{
	name:"oliver",
	age:18,
},{
	name:"oliver1",
	age:19,
}
])

// 单个
db.test.insert({
	name:"oliver",
	age:18,
})

用法就是 insertOneinsertMany 的用法;

5.4 db.collection.save()

这个方法也是用来创建文档的,基本用法如下:

db.<collection>.save(
  <document>,
    {
      writeConcern:<document>
    }
)

这个命令它 本身是调用insert这个方法,db.collection.save()和db.collection.insert()在某种程度上可以是为完全相同,因此不多做介绍了~

六、小结

本文主要记录了什么是文档主键,以及在常规数据库操作中文档创建的一些用法~在日常开发中文档创建用的最多的还是 db.collection.insert() 毕竟它既可以创建单个文档,也可以添加多个文档,当然具体还是根据自己的习惯与喜好进行选择~

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

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

相关文章

R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归

通过对用电负荷的消费者进行聚类&#xff0c;我们可以提取典型的负荷曲线&#xff0c;提高后续用电量预测的准确性&#xff0c;检测异常或监控整个智能电网&#xff08;Laurinec等人&#xff08;2016&#xff09;&#xff0c;Laurinec和Luck&#xff08; 2016&#xff09;&…

JavaScript正则表达式加密

正则表达式可以加密吗&#xff1f; 是的&#xff0c;可以。起码可以确定的是在JavaScript编程中是可以的。 正则表达式加密有什么用&#xff1f; 可以隐藏一些重要的、私密的字符串内容&#xff0c;使代码的逻辑、秘密不容易被人窥探。 正则表达式加密示例 例如&#xff1…

1536_AURIX_TriCore内核架构_Trap

全部学习汇总&#xff1a; GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 近段时间一直在跟trap打交道&#xff0c;但是处理得毫无头绪&#xff0c;因此找出来了这一章节看一下。暂时&#xff0c;这方面稍微有了一点框架感&…

观世界赛事,品足球人生--2022世界杯

观世界赛事&#xff0c;品足球人生 – 2022世界杯 1.卡塔尔世界杯百科 2022年卡塔尔世界杯&#xff08;英语&#xff1a;FIFA World Cup Qatar 2022&#xff09;是第二十二届世界杯足球赛&#xff0c;是历史上首次在卡塔尔和中东国家境内举行、也是第二次在亚洲举行的世界杯足…

iwebsec靶场 SQL注入漏洞通关笔记7- 空格过滤绕过

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入&#xff08;宽字节注入&#xff09;_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记3- bool注入&#xff08;布尔型盲注&#…

关于mac上如何U盘

关于mac上如何U盘 背景 使用macbook的大概都会遇到 “如何连接U盘” 的问题&#xff0c;网上会搜到很多教程&#xff0c;我觉得很多都不太实用。 首先这个需求是有的&#xff0c;但是对很多人来说很低频几个月用不到一次&#xff0c;所以得找个顺手靠谱的方法。下面是我经历…

【机器学习入门项目10例】(十):PCA降维:简易人脸识别模型

🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 + 数据集 + 完整源码🐶🦜【机器学习项目实战10例目录】项目详解 + 数据集 +

C++——电话号码的字母组合问题

文章目录电话号码的字母组合题目链接思路&#xff1a;代码&#xff1a;调试演示电话号码的字母组合 题目链接 思路&#xff1a; 首先使用string类的数组存储每个数字对应的所有可能的字母&#xff0c;然后进行回溯操作。 string arr[] { "","","…

分享88个NET源码,总有一款适合您

链接&#xff1a;https://pan.baidu.com/s/1dPlj8w-rvVQXuJOHPO6tBA?pwddj0d 提取码&#xff1a;dj0d 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后可以看到。 启明星Appform员工请假系统 25175云酒店管…

微模块化炙手可热,数据中心走向智能化取胜

近年来&#xff0c;“微模块化”成为数据中心领域炙手可热的话题。 Gartner《企业数据中心未来趋势报告》预测&#xff0c;AI、5G、新型电池、模块化设计思想等将改变数据中心的未来&#xff0c;数据中心将走向分散化&#xff0c;并且预计到2025年&#xff0c;微数据中心的数量…

(附源码)python电影院信息管理系统 毕业设计 021844

电影院信息管理系统的设计与实现 摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。电影院每天都有大量的信息需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于B/S&#xff08;浏览器/服务器&#xff09;模式的电影院信息管理系统。 …

你的NET程序需要保护吗?Agile.net 6.6.X 注入式Crack

Agile.net 使用专利技术将 MSIL 代码转换为虚拟操作码&#xff0c;只有安全的虚拟机才能理解。虚拟机直接处理虚拟操作码&#xff0c;模拟原始代码行为而不将代码转换回其原始形式。破坏保护成为NP完全问题&#xff0c;从而使Agile.net成为唯一保证您的代码不会被破坏的混淆器&…

【保姆级】手把手Debug循环依赖的整体流程

我们先看一下循环依赖&#xff0c;这样看、 或者这样看、 一提到循环依赖基本必提三级缓存&#xff0c;本篇又是篇保姆级的Debug教程&#xff0c;详解出现循环依赖Spring处理的全过程&#xff0c;之前也介绍过一些与本篇相关的内容&#xff1a; 想瞅瞅三级缓存的庐山真面目可以…

2022/11/27[指针] 指针与函数基础

程序&#xff1a;求10个数的最大数 1、定义指向函数的指针变量调用函数的方法 一般定义形式为&#xff1a;类型名 &#xff08;*指针变量名)()&#xff1b; #include<stdio.h> int main() {int i, m, a[10], max(int* p);int (*f)();for (i 0; i < 10; i)scanf_s(&q…

牛客网基础知识强化巩固-周结03

数组强化训练篇 2022-11-21 打卡 知识点总结 什么是渐进时间复杂度 渐进时间复杂度是指n趋于无穷时的复杂度。向有序表中任意一个位置插入元素&#xff0c;插入位置之后的元素依次挪动一个位置&#xff0c;假设元素插入的位置坐标为k&#xff0c;则时间复杂度为O(k)&#xf…

名词性从句

目录 1.名词性从句 1.1陈述句 1.2一般疑问句变名词性从句 1.3特殊疑问句变名词性从句 1.4特别的what 2.同位语从句 3.同位语从句与定语从句的区别 4.同位语从句的巅峰知识点 5.主语从句 5.2 并列主语从句 5.3主语从句巅峰知识点 6.宾语从句 主系表是不能被动的。所以第…

WPF-控件的常用属性-单例-隧道事件

特殊字符 小于< 大于> 空格xml:space"preserve" 例如&#xff1a;TextBox Grid.Column"1" xml:space"preserve">aaaaa .</TextBox> 从一个xaml文件中获取xaml内容 //DependencyObject是wpf控件的基类&#xff0c;它可以放到…

Ubuntu 安装“安装程序向硬盘复制文件时遇到错误[Errno 5] Input/output error”错误解决过程记录

前阵子装 Ubuntu&#xff0c;原本已经装了几百遍的系统它又双叒叕出问题了&#xff0c;问题内容就如标题看到的那样。解决过程中经历了很多坎坷&#xff0c;不过好在最后还是成功了~ 下面整理了一下我解决问题的过程&#xff0c;需要自取~ 方法 1&#xff1a;烧录 U 盘时文件格…

chapter3——处理多个时钟

目录1.多时钟域2.多时钟域设计的难题3.多时钟设计的处理技术时钟命名规则分模块设计跨时钟域4.跨时钟域同频零相位差时钟同频恒定相位差时钟非同频、可变相位差时钟整数倍频率的时钟非整数倍频率的时钟5.握手信号方法6.使用同步FIFO传输数据7.异步FIFO1.多时钟域 常见的多时钟…

linux环境验证c++程序库间调用

目录 0 背景 1 VMware、以及linux安装 2 安装QtCreator 2.1 下载速度慢&#xff0c;使用国内镜像 2.2 执行有问题&#xff0c;修改权限 2.3 验证是否可用 2.4 调试&#xff08;待解决&#xff09; 3 开发程序进行验证 4 其他问题 4.1 虚拟机与主机无法拷贝文件&#x…