MongoDB的简单使用

MongoDB(文档数据库)的简单使用

MongoDB最好的学习资料就是他的官方文档:SQL 到 MongoDB 的映射图表 - MongoDB 手册 v8.0

1.SQL到MongoDB的映射表

下表列出各种SQL术语和概念以及相应的MongoDB术语和概念

传统关系型数据库中SQL术语/概念NoSQL型MongoDB数据库术语/概念
databasedatabase
数据表(table)集合(collection)
文档或BSON文档
字段
索引(index)索引(index)
表连接$lookup,嵌入式文档
主键主键
指定任何唯一列或列组合作为主键在MongoDB中,主键会自动设置为_id字段
聚合(例如分组依据)聚合管道(请参阅 SQL 聚合映射图表)
SELECT INTO NEW_TABLE$out( 请参阅SQL 聚合映射图表)
MERGE INTO TABLE$merge(请参阅 SQL 聚合映射图表)
UNION ALL$unionWith
事务事务(在许多场景中,非规范化数据模型(嵌入式文档和数组),而不是多文档事务,将继续是数据和使用案例的最佳选择。换言之,对于许多场景,适当地建模数据将最大限度地减少对多文档事务的需求)

2.可执行程序的对比

MongodbMySQLOracle
数据库服务mongodmysqldoracle
数据库客户端mongoshmysqlsqlplus

3.SQL语句之间的对比

如下代码表示在MongoDB中的一个集合中一条数据记录的状态;

示例:

{_id: ObjectId("509a8fb2f3f4948bd2f983a0"),user_id: "abc123",age: 55,status: 'A'
}

3.1创建和更改

下表列出了与表级动作相关的各种SQL语句以及对应的MongoDB语句。

(1)SQL模式语句

创建表:

CREATE TABLE people (id MEDIUMINT NOT NULLAUTO_INCREMENT,user_id Varchar(30),age Number,status char(1),PRIMARY KEY (id)
)

修改表:

ALTER TABLE people
ADD join_date DATETIME
ALTER TABLE people
DROP COLUMN join_date

 创建索引:

CREATE INDEX idx_user_id_asc
ON people(user_id)
CREATE INDEXidx_user_id_asc_age_desc
ON people(user_id, age DESC)

删除表:

DROP TABLE people

(2)对应上述SQL语句的MongoDB语句

创建集合

a.隐式的创建一个集合

在第一个 insertOne() 或 insertMany() 操作上隐式创建。如果未指定 _id 字段,则会自动添加主键 _id

db.people.insertOne( {user_id: "abc123",age: 55,status: "A"} )

b.显示的创建一个集合

db.createCollection("people")

修改集合

集合并不描述或强制执行其文档的结构;也就是说,集合层面上不会有结构变化。

不过,在文档级别,updateMany() 操作可以使用 $set 操作符将字段添加到现有文档中。

db.people.updateMany({ },{ $set: { join_date: new Date() } }
)

集合并不描述或强制执行其文档的结构;也就是说,集合层面上不会有结构变化。

不过,在文档级别,updateMany() 操作可以使用 $unset 操作符从文档中删除字段。

db.people.updateMany({ },{ $unset: { "join_date": "" } }
)

创建索引

db.people.createIndex( { user_id: 1 } )
db.people.createIndex( { user_id: 1, age: -1 } )

删除集合

db.people.drop()

3.2Insert

(1)传统SQL

INSERT INTO people(user_id,age,status)
VALUES ("bcd001",45,"A")

(2)MongoDB

db.people.insertOne({ user_id: "bcd001", age: 45, status: "A" }
)

3.3Select

(1)传统SQL

(1)SELECT * FROM people(2)SELECT id,user_id,status FROM people(3)SELECT user_id, status FROM people(4)SELECT * FROM people WHERE status = "A"(5)SELECT user_id, status FROM people WHERE status = "A"(6)SELECT * FROM people WHERE status != "A"(7)SELECT * FROM people WHERE status = "A" AND age = 50(8)SELECT * FROM people WHERE status = "A" OR age = 50(9)SELECT * FROM people WHERE age > 25(10)SELECT * FROM people WHERE age < 25(11)SELECT * FROM people WHERE age > 25 AND   age <= 50(12)SELECT * FROM people WHERE user_id like "%bc%"(13)SELECT * FROM people WHERE user_id like "bc%"(14)SELECT * FROM people WHERE status = "A" ORDER BY user_id ASC(15)SELECT * FROM people WHERE status = "A" ORDER BY user_id DESC(16)SELECT COUNT(*) FROM people(17)SELECT COUNT(user_id) FROM people(18)SELECT COUNT(*) FROM people WHERE age > 30(19)SELECT DISTINCT(status) FROM people(20)SELECT * FROM people LIMIT 1(21)SELECT * FROM people LIMIT 5 SKIP 10(22)EXPLAIN SELECT * FROM people WHERE status = "A"

(2)MongoDB

(1)db.people.find()(2)db.people.find({ },{ user_id: 1, status: 1 }
)(3)db.people.find({ },{ user_id: 1, status: 1, _id: 0 }
)(4)db.people.find({ status: "A" }
)(5)db.people.find({ status: "A" },{ user_id: 1, status: 1, _id: 0 }
)(6)db.people.find({ status: { $ne: "A" } }
)(7)db.people.find({ status: "A",age: 50 }
)(8)db.people.find({ $or: [ { status: "A" } , { age: 50 } ] }
)(9)db.people.find({ age: { $gt: 25 } }
)(10)db.people.find({ age: { $lt: 25 } }
)(11)db.people.find({ age: { $gt: 25, $lte: 50 } }
)(12)db.people.find( { user_id: /bc/ } )
或
db.people.find( { user_id: { $regex: /bc/ } } )(13)db.people.find( { user_id: /^bc/ } )
或
db.people.find( { user_id: { $regex: /^bc/ } } )(14)db.people.find( { status: "A" } ).sort( { user_id: 1 } )(15)db.people.find( { status: "A" } ).sort( { user_id: -1 } )(16)db.people.count()
或
db.people.find().count()(17)db.people.count( { user_id: { $exists: true } } )
或
db.people.find( { user_id: { $exists: true } } ).count()(18)db.people.count( { age: { $gt: 30 } } )
或
db.people.find( { age: { $gt: 30 } } ).count()(19)db.people.aggregate( [ { $group : { _id : "$status" } } ] )
或,对于不超过 BSON 大小限制的非重复值集
db.people.distinct( "status" )(20)db.people.findOne()    或    db.people.find().limit(1)(21)db.people.find().limit(5).skip(10)(22)db.people.find( { status: "A" } ).explain()

3.4Update

(1)传统SQL

UPDATE people
SET status = "C"
WHERE age > 25UPDATE people
SET age = age + 3
WHERE status = "A"

(2)MongoDB

db.people.updateMany({ age: { $gt: 25 } },{ $set: { status: "C" } }
)db.people.updateMany({ status: "A" } ,{ $inc: { age: 3 } }
)

3.5Delete

(1)传统SQL

DELETE FROM people
WHERE status = "D"DELETE FROM people

(2)MongoDB

db.people.deleteMany( { status: "D" } )db.people.deleteMany({})

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

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

相关文章

【英一】1998年

阅读1 suffering. 苦难at the mercy of. 完全受...的支配do ones bidding. 服从某人threaten to. 可能...&#xff08;发生不好的事情&#xff09;do more harm than good. 弊大于利strive to. 争取&#xff0c;努力assert. 主张cement. 巩固bid for. (尤指许下诺言)企图获得&…

Zookeeper集群数据是如何同步的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper集群数据是如何同步的?】面试题。希望对大家有帮助&#xff1b; Zookeeper集群数据是如何同步的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper集群中的数据同步是通过一种称为ZAB&#xff08;Zo…

CTF之密码学(密码特征分析)

一.MD5,sha1,HMAC,NTLM 1.MD5&#xff1a;MD5一般由32/16位的数字(0-9)和字母(a-f)组成的字符串 2.sha1&#xff1a;这种加密的密文特征跟MD5差不多&#xff0c;只不过位数是40&#xff08;sha256&#xff1a;64位&#xff1b;sha512:128位&#xff09; 3.HMAC&#xff1a;这…

Android 分词的两种方式

前言&#xff1a; 本文分别介绍了原生和三方(Jieba)两种分词方式的使用和注意事项 1、安卓原生BreakIterator分词 比较简单&#xff0c;但是效果不太行 /*** 功能&#xff1a;原生分词* 参数&#xff1a;text&#xff1a;需要分词的语句* 返回值&#xff1a;return&#xf…

如何开展单元测试

1、是什么 单元测试&#xff08;Unit Testing&#xff09;又称为模块测试&#xff0c;是针对程序模块来进行正确性检验的测试工作。 程序模块是软件设计的最小单位&#xff0c;程序单元是应用的最小可测试部件 • 在面向过程编程中&#xff0c;一个单元就是单个程序、函数、过…

40分钟学 Go 语言高并发:服务性能调优实战

服务性能调优实战 一、性能优化实战概述 优化阶段主要内容关键指标重要程度瓶颈定位收集性能指标&#xff0c;确定瓶颈位置CPU、内存、延迟、吞吐量⭐⭐⭐⭐⭐代码优化优化算法、并发、内存使用代码执行时间、内存分配⭐⭐⭐⭐⭐系统调优调整系统参数、资源配置系统资源利用率…

代码随想录-算法训练营day31(贪心算法01:分发饼干,摆动序列,最大子数组和)

第八章 贪心算法 part01● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和 贪心算法其实就是没有什么规律可言&#xff0c;所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律&#xff0c; 没有思路就立刻看题解。基本贪心的题目 …

JVM 参数前缀 -XX: 含义 详解

在 Java 虚拟机&#xff08;JVM&#xff09;中&#xff0c;参数前缀 -XX: 表示的是 JVM 的非标准&#xff08;实验性&#xff09;选项。这些参数用于调整和优化 JVM 的性能、垃圾回收行为、内存分配策略等。 1. 参数分类 -XX: 参数大致分为三类&#xff0c;根据其格式区分&…

有趣的Docker

&#x1f449;【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中 1. Docker 上的“全世界”命令行 你可以在 Docker 容器中运行一个模拟的 “世界地图”&#xff0c;并通过命令行与它互动。这是一个非常有趣的项目&#xff0c;结合了命令行和图形界面的交互。…

win11无法检测到其他显示器-NVIDIA

https://www.nvidia.cn/software/nvidia-app/ https://cn.download.nvidia.cn/nvapp/client/11.0.1.163/NVIDIA_app_v11.0.1.163.exe 下载安装后&#xff0c;检测驱动、更新驱动。

(数据结构与算法)如何提高学习算法的效率?面试算法重点有哪些?面试需要哪些能力?

面试官眼中的求职者 通过对你算法的考察&#xff01;&#xff01;&#xff01;&#xff01; 缩进太多&#xff01;&#xff01;一般不要超过三层&#xff01;&#xff01;&#xff01;缩进越少&#xff0c;bug越少&#xff1b;逻辑比较复杂&#xff0c;把这些包装成为函数&…

Applied Intelligence投稿

一、关于手稿格式&#xff1a; 1、该期刊是一个二区的&#xff0c;模板使用Springer nature格式&#xff0c; 期刊投稿要求&#xff0c;详细期刊投稿指南&#xff0c;大部分按Soringernature模板即可&#xff0c;图片表格声明参考文献命名要求需注意。 2、参考文献&#xff…

洛谷 P1150:Peter 的烟 ← while循环

【题目来源】https://www.luogu.com.cn/problem/P1150【题目描述】 Peter 有 n 根烟&#xff0c;他每吸完一根烟就把烟蒂保存起来&#xff0c;k&#xff08;k>1&#xff09;个烟蒂可以换一个新的烟&#xff0c;那么 Peter 最终能吸到多少根烟呢&#xff1f; 与某些脑筋急转弯…

【学习总结|DAY010】Java 流程控制与数据操作练习四:简易计算器

在这段 Java 代码中&#xff0c;我将解析一段简单的 Java 计算器代码&#xff0c;它能够执行基本的数学运算&#xff0c;包括加法、减法、乘法和除法。 一、主要代码 import java.util.Scanner;public class demo101Calculator {public static void main(String[] args) {Sca…

深入云电脑PC Farm技术探讨,以阿里云、华为云、ToDesk为例

&#x1f31d;引言 近年来&#xff0c;云计算技术的飞速发展为各行各业的数字化转型带来了全新机遇&#xff0c;其中云电脑作为一种虚拟化桌面解决方案&#xff0c;逐渐成为个人用户与企业的核心选择。从远程办公、在线教育到高性能计算需求&#xff0c;云电脑通过为用户提供随…

力扣88题:合并两个有序数组

力扣88题&#xff1a;合并两个有序数组 题目描述 给定两个按非递减顺序排列的整数数组 nums1 和 nums2&#xff0c;以及它们的长度 m 和 n&#xff0c;要求将 nums2 合并到 nums1&#xff0c;使得合并后的数组仍按非递减顺序排列。 输入与输出 示例 1&#xff1a; 输入&am…

MAUI APP开发蓝牙协议的经验分享:与跳绳设备对接

在开发MAUI应用程序时&#xff0c;蓝牙协议的应用是一个重要的环节&#xff0c;尤其是在需要与外部设备如智能跳绳进行数据交换的场景中。以下是我在开发过程中的一些经验和心得&#xff0c;希望能为你的项目提供帮助。 1. 蓝牙协议基础 蓝牙协议是无线通信的一种标准&#x…

Vector软件CANdb++的信号起始位Bug

问题现象 前几天导入DBC文件发现不对劲&#xff0c;怎么生成代码的起始地址都怪怪的&#xff0c;检查下工程里面的配置&#xff0c;还真的是这样&#xff0c;一路查到输入文件——DBC文件&#xff0c;发现是DBC文件就有错误&#xff1a;一些CAN报文之后8字节长度&#xff0c;也…

Qt 面试题学习12_2024-11-30

Qt 面试题 1、描述Qt的TCP通讯流程2、自定义控件流程3、什么是Qt的插件机制 &#xff1f; 1、描述Qt的TCP通讯流程 服务端&#xff08;QTcpServer&#xff09; 1、创建TcpServer对象 2、使用listen()方法将服务器绑定到本地地址和端口 3、当有新的客户端连接成功发送newConnec…

2022-12-4----Android11(H713m)---- WiFi驱动添加写入mac号补丁

一、问题 用全志的写号工具&#xff0c;写入wifi_mac&#xff0c;设置下边不生效 二、分析 因为我们的WiFi不是用全志平台的&#xff0c;也不是用全志集成好的&#xff0c;而是用希微这家第三方的WiFi/BT&#xff0c;所以该驱动还没完善。 三、修改前的准备 用写号工具写号…