MongoDB相关基础操作(库、集合、文档)

文章目录

  • 一、库的相关操作
    • 1、查看数据库
    • 2、查看当前库
    • 3、创建数据库
    • 4、删除数据库
  • 二、集合的相关操作
    • 1、查看库中所有集合
    • 2、创建集合
      • 2.1、显示创建
      • 2.2、隐式创建
    • 3、删除集合
  • 三、文档的相关操作
    • 1、插入文档
      • 1.1、插入单条文档
      • 1.2、插入多条文档
      • 1.3、脚本方式
    • 2、查询文档
    • 3、删除文档
    • 4、更新文档
    • 5、查询文档
      • 5.1、语法
      • 5.2、对比语法
      • 5.3、AND
      • 5.4、OR
      • 5.5、AND 和 OR 联合
      • 5.6、数组中查询
      • 5.7、模糊查询
      • 5.8、排序
      • 5.9、分页
      • 5.10、总条数
      • 5.11、去重
      • 5.12、指定返回字段
  • 总结


一、库的相关操作

1、查看数据库

查看所有数据库有两种命令:

show databases
或
show dbs

在这里插入图片描述

2、查看当前库

最新版的MongoDB在>的左边已经显示当前的数据库名称了。

db

在这里插入图片描述

3、创建数据库

use命令是创建并使用(如果数据库已经有了则是切换数据库)

use gedeshidai

注意:
MongoDB有一种机制:当数据库中没有数据的时候,命令show dbs不会显示
当输入db的时候,会显示创建的数据(db命令是显示当前使用的数据库)
但是当我们在新建的数据库中插入一条数据后,就能显示出来了。

db.users.insert({name:'gedeshidai'});

在这里插入图片描述
注意:

  • admin:从权限的角度来看,这是" root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
  • conlig :当Mongo用于分片设置时, config数据库在内部使用,用于保存分片的相关信息。

4、删除数据库

默认删除当前数据库

db.dropDatabase()

在这里插入图片描述
虽然已经删除数据库gedeshidai,但是我们当前仍在gedeshidai数据库里面,这点需要注意。这是MongoDB的机制。
在这里插入图片描述

二、集合的相关操作

1、查看库中所有集合

show collections
或
show tables

在这里插入图片描述

2、创建集合

2.1、显示创建

db.createCollection('集合名称',[options])

options可以是如下参数(可选):

字段类型描述
capped布尔(可选)如果为true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为true时,必须指定size参数
size数值(可选)为固定集合指定一个最大值,即字节数。如果capped为true,也需要指定该字段
max数值(可选)指定固定集合中包含文档的最大数量。

在这里插入图片描述

2.2、隐式创建

注意:当集合不存在时,向集合中插入文档也会自动创建该集合
在这里插入图片描述

3、删除集合

db.集合名称.drop();

在这里插入图片描述

三、文档的相关操作

官网地址:https://www.mongodb.com/docs/manual/crud/

1、插入文档

1.1、插入单条文档

db.集合名称.insert(document)-- 举例:
db.users.insert({"name":"哥的时代","age":21,"bir":"2023-11-19"});​-- db.集合名称.insertOne():向指定集合中插入一条文档数据【推荐使用】
db.users.insertOne({"name":"哥的时代","age":21,"bir":"2023-11-19"});

1.2、插入多条文档

db.collection.insertMany():向指定集合中插入多条文档数据【推荐使用】
db.集合名称.insertMany([ <document 1> , <document 2>, ... ],{writeConcern: 1,//写入策略,默认为1,即要求确认写操作,0是不要求。ordered: true //指定是否按顺序写入,默认true,按顺序写入。})-- 举例:
db.users.insert([{"name":"哥的时代","age":21,"bir":"2023-11-19"},{"name":"小黑","age":22,"bir":"2023-11-19"}]);或
db.users.insertMany([{"name":"哥的时代","age":21,"bir":"2023-11-19"},{"name":"小黑","age":22,"bir":"2023-11-19"}
]);

1.3、脚本方式

for(let i=0;i<100;i++){db.users.insert({"_id":i,"name":"哥的时代_"+i,"age":21});}​-- 1、先创建数组-- 2、将数据放在数组中-- 3、一次 insert 到集合中var arr = [];for(var i=1 ; i<=20000 ; i++){arr.push({num:i});}db.numbers.insert(arr);

注意:在mongodb中每个文档都会有一个_id作为唯一标识,_id默认会自动生成,如果手动指定将使用手动指定的值作为_id 的值。

2、查询文档

db.集合名称.find();

3、删除文档

 db.集合名称.remove(<query>,{justOne: <boolean>,writeConcern: <document>})-- 由于remove()方法已经过时了,现在官方推荐使用deleteOne()和deleteMany()方法。
db.集合名称.deleteMany({query})  -- 不指定条件时删除集合下全部文档
db.users.deleteMany({});
db.users.deleteMany({age:21});​
db.集合名称.deleteOne({query})  -- 删除一条文档
db.users.deleteOne({_id:ObjectId("65586ebacd3d67eac1aec0d4")});

参数说明:

  • query :可选删除的文档的条件。

  • justOne : 可选如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

  • writeConcern :可选抛出异常的级别。

注意:文档内容全部删除后,文档仍存在,即删除内容,不删除结构

4、更新文档

db.集合名称.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>});

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。

  • update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的

  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

  • writeConcern :可选,抛出异常的级别。

    • WriteConcern.NONE:没有异常抛出

    • WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常

    • WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。

    • WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。

    • WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。

    • WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。

    • WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。

  • db.集合名称.update({“name”:“zhangsan”},{name:“11”,bir:new date()})
    这个更新是将符合条件的全部更新成后面的文档,相当于先删除在更新
  • db.集合名称.update({“name”:“xiaohei”},{$set:{name:“mingming”}})
    保留原来数据更新,但是只更新符合条件的第一条数据
  • db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true})
    保留原来数据更新,更新符合条件的所有数据
  • db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true,upsert:true})
    `保留原来数据更新,更新符合条件的所有数据,没有条件符合时插入数据

注意:在7.x版本的时候update()方法已经不适用了,官网提供了以下方法进行操作:

db.collection.updateOne()
最多更新与指定筛选器匹配的单个文档 即使多个文档可能与指定的筛选器匹配。db.collection.updateMany()
更新与指定筛选器匹配的所有文档。db.collection.replaceOne()
最多替换与指定筛选器匹配的单个文档 即使多个文档可能与指定的筛选器匹配。

5、查询文档

MongoDB查询文档使用find()方法。find()方法以非结构化的方式来显示所有文档。

5.1、语法

db.集合名称.find(query, projection)
  • query :可选,使用查询操作符指定查询条件

  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.集合名称.find().pretty()

注意: pretty()方法以格式化的方式来显示所有文档

5.2、对比语法

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

操作格式范例RDBMS中的类似语句
等于{:}db.col.find({“by”:“哥的时代”}).pretty()where by = ‘哥的时代’
小于{:{$lt:}}db.col.find({“likes”:{$lt:50}}).pretty()where likes < 50
小于或等于{:{$lte:}}db.col.find({“likes”:{$lte:50}}).pretty()where likes <= 50
大于{:{$gt:}}db.col.find({“likes”:{$gt:50}}).pretty()where likes > 50
大于或等于{:{$gte:}}db.col.find({“likes”:{$gte:50}}).pretty()where likes >= 50
不等于{:{$ne:}}db.col.find({“likes”:{$ne:50}}).pretty()where likes != 50

5.3、AND

db.集合名称.find({key1:value1, key2:value2,...}).pretty()

类似于 WHERE 语句:WHERE key1=value1 AND key2=value2

  • db.users.find({“age”:27,“name”:“哥的时代”,_id:8});

  • db.users.find({“age”:3,“age”:32});同一字段多次出现查询条件时,只有最后的查询条件才生效,即后面会覆盖前面的查询条件

5.4、OR

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

db.集合名称.find({$or: [{key1: value1}, {key2:value2}]}).pretty()

类似于 WHERE 语句:WHERE key1=value1 or key2=value2

  • db.users.find({$or:[{_id:4},{age:18}]});

5.5、AND 和 OR 联合

类似SQL语句为:‘where age >25 AND (name = ‘哥的时代’ OR name = ‘MongoDB’)’

db.集合名称.find({"age": {$gt:25}, $or: [{"name": "哥的时代"},{"name": "MongoDB"}]}).pretty();
  • db.users.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 6: gt:15}̲,or:[{_id:3},{age:15}]});

5.6、数组中查询

-- 测试数据
db.集合名称.insert({ "_id" : 11, "age" : 29, "likes" : [ "看电视", "读书xx", "美女" ], "name" : "哥的时代_xx_11" })-- 执行数组查询> db.users.find({likes:"看电视"})-- $size 按照数组长度查询> db.users.find({likes:{$size:3}});

5.7、模糊查询

类似 SQL 中为 ‘where name like ‘%name%’’

db.users.find({likes:/哥/});

注意:在 mongoDB 中使用正则表达式可以是实现近似模糊查询功能

5.8、排序

db.集合名称.find().sort({name:1,age:1})
- 1 升序  -1 降序

类似 SQL 语句为: ‘order by name,age’

5.9、分页

db.集合名称.find().sort({条件}).skip(start).limit(rows);

类似于 SQL 语句为: ‘limit start,rows’

5.10、总条数

db.集合名称.count();
db.集合名称.find({"name":"哥的时代"}).count();

类似于 SQL 语句为: ‘select count(id) from …’

DeprecationWarning: Collection.count() is deprecated. Use countDocuments or estimatedDocumentCount.

  • db.users.countDocuments();

  • db.users.estimatedDocumentCount();

5.11、去重

db.集合名称.distinct('字段')

类似于 SQL 语句为: ‘select distinct name from …’

  • db.users.distinct(“age”);

5.12、指定返回字段

db.集合名称.find({条件},{name:1,age:1}) 
- 参数2: 1 返回  0 不返回  
  • db.users.find({},{“name”:1});查询所有,返回指定字段

  • db.users.find({age:{$lt:17}},{name:1});按照指定条件查询,返回指定字段

  • db.users.find({age:{$lt:17}},{_id:0,name:1});按照指定条件查询,返回指定字段,不返回id,注意id是唯一索引


总结

以上就是MongoDB相关基础操作(库、集合、文档)的知识点,希望对你有所帮助。

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

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

相关文章

深入理解注意力机制(下)——缩放点积注意力及示例

一、介绍 在这篇文章中&#xff0c;我们将重点介绍 Transformer 背后的 Scaled Dot-Product Attention&#xff0c;并详细解释其计算逻辑和设计原理。 在文章的最后&#xff0c;我们还会提供一个Attention的使用示例&#xff0c;希望读者看完后能够对Attention有更全面的了解。…

gRPC 四模式之 双向流RPC模式

双向流RPC模式 在双向流 RPC 模式中&#xff0c;客户端以消息流的形式发送请求到服务器端&#xff0c;服务器端也以消息流的形式进行响应。调用必须由客户端发起&#xff0c;但在此之后&#xff0c;通信完全基于 gRPC 客户端和服务器端的应用程序逻辑。 为什么有了双向流模式…

Windows安装Vmware 虚拟机

目录 一、Vmware 虚拟机介绍 二、Vmware 虚拟机的三种网络模式 2.1桥接模式 2.2仅主机模式 2.3NAT 网络地址转换模式 三、Vmware 虚拟机的安装 一、Vmware 虚拟机介绍 VMware Workstation Pro 是一款可以在个人电脑的操作系统上创建一个完全与主机操作系统隔离的 虚拟机&…

Vite - 静态资源处理 - json文件导入

直接就说明白了 vite 中对json 文件直接当作一个模块来解析。 可以直接导入使用&#xff01; 可以直接导入使用&#xff01; 可以直接导入使用&#xff01;json文件中的key&#xff0c;直接被作为一个属性&#xff0c;可以单独被导入。 因此&#xff0c;导入json文件有两种方式…

特效!视频里的特效在哪制作——Adobe After Effects

今天&#xff0c;我们来谈谈一款在Adobe系列中推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室的属于层类型后期软件——Adobe After Effects。 Adobe After Effects&#xf…

WPF中行为与触发器的概念及用法

完全来源于十月的寒流&#xff0c;感谢大佬讲解 一、行为 (Behaviors) behaviors的简单测试 <Window x:Class"Test_05.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winf…

nodejs+vue慢性胃炎健康管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于慢性胃炎健康管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了慢性胃炎健康管理系统&#xff0c; 系统首页、个…

蓝桥杯单片机综合练习——工厂灯光控制

一、题目 二、代码 #include <reg52.h>sfr AUXR 0x8e; //定义辅助寄存器sbit S5 P3^2; //定义S5按键引脚 sbit S4 P3^3; //定义S4按键引脚unsigned char led_stat 0xff; //定义LED当前状态 unsigned char count 0; //定义50ms定时中断累…

GitHub如何删除仓库

GitHub如何删除仓库 删除方法第一步第二步第三步 删除方法 第一步 在仓库的界面选择Settings 第二步 选择General,页面拉到最后。 第三步 后续按照导向删除仓库即可。

C++ Qt 学习(十):Qt 其他技巧

1. 带参数启动外部进程 QProcess 用于启动外部进程int QProcess::execute(const QString &program, const QStringList &arguments);QObject *parent; ... QString program "./path/to/Qt/examples/widgets/analogclock"; QStringList arguments; argument…

论文阅读——DiffusionDet

在目标检测上使用扩散模型 前向过程&#xff1a;真实框-->随机框 后向过程&#xff1a;随机框-->真实框 前向过程&#xff1a; 一般一张图片真实框的数目不同&#xff0c;填补到同一的N个框&#xff0c;填补方法可以是重复真实框&#xff0c;填补和图片大小一样的框&a…

教程:使用 Keras 优化神经网络

一、介绍 在 我 之前的文章中&#xff0c;我讨论了使用 TensorFlow 实现神经网络。继续有关神经网络库的系列文章&#xff0c;我决定重点介绍 Keras——据说是迄今为止最好的深度学习库。 我 从事深度学习已经有一段时间了&#xff0c;据我所知&#xff0c;处理…

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如&#xff0c;下面的类RegisterResponse 使用了XmlRootElement注解&#xff0c;同时也使用XmlType注解&#xff0c;并用XmlType注解的propOrder属性&#xff0c;指定了两个用XmlElement注解的元素出现的顺序&#xff0c;先出现flag&#xff0c;后出现enterpriseId&#xff0…

python趣味编程-5分钟实现一个蛇梯游戏(含源码、步骤讲解)

蛇梯游戏是用Python编程语言开发的,它是一个桌面应用程序。 这个Python蛇梯游戏可以免费下载开源代码,它是为想要学习Python的初学者创建的。 该项目系统使用了 Pygame 和 Random 模块。 Pygame 是一组跨平台的 Python 模块,专为编写视频游戏而设计。 此游戏包含 Python …

度加创作工具 演示

度加创作工具 功能图功能测试文比润色测试经验分享测试测试输出测试输出工具地址功能图 功能测试 文比润色测试 经验分享测试 测试输出 在人工智能领域,我们一直在追求一个终极目标:让机器能够像人类一样,能够理解、学习和解决各种复杂问题。而要实现这个目标,我们需要将…

torch_cluster、torch_scatter、torch_sparse三个包的安装

涉及到下面几个包安装的时候经常会出现问题&#xff0c;这里我使用先下载然后再安装的办法&#xff1a; pip install torch_cluster pip install torch_scatter pip install torch_sparse 1、选择你对应的torch版本&#xff1a;https://data.pyg.org/whl/ 2、点进去然后&…

【Java 进阶篇】JQuery 事件绑定:`on` 与 `off` 的奇妙舞曲

在前端开发的舞台上&#xff0c;用户与页面的互动是一场精彩的表演。而 JQuery&#xff0c;作为 JavaScript 的一种封装库&#xff0c;为这场表演提供了更为便捷和优雅的事件绑定方式。其中&#xff0c;on 和 off 两位主角&#xff0c;正是这场奇妙舞曲中的核心演员。在这篇博客…

Smart Tomcat的使用

文章目录 Smart Tomcat的作用Smart Tomcat的安装Smart Tomcat的配置Smart Tomcat的启动 Smart Tomcat的作用 我们知道使用Servlet来完成一个项目一共需要七个步骤&#xff0c;即创建maven项目、添加依赖、创建目录结构、编写代码、打包程序、部署程序、验证程序。这样的确是完…

AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

【LeetCode刷题-树】-- 572.另一棵树的子树

572.另一棵树的子树 方法&#xff1a;深度优先搜索暴力匹配 深度优先搜索枚举root中的每一个节点&#xff0c;判断这个点的子树是否与subroot相等 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right…