MongoDB的操作和理解

什么是MongoDB?

MongoDB:基于分布式文件存储的数据库由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB的优点:

  1. MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。

  2. 如果负载的增加,它可以分布在计算机网络中的其他节点上这就是所谓的分片。

  3. MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

  4. 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。

为什么学习MongoDB?

MongoDB解决Mysql 的"三高"问题:

  1. 对数据库高并发写入需求
  2. 对海量数据高效率存储访问需求
  3. 对数据库高扩展和高可用的需求

MongoDB的缺点:

  • MongoDB 不支持事务
  • MongoDB 不能进行多表联查

MongoDB名词概念

SQL术语 MongoDB术语 解释说明
database database 数据库
table collection 数据库表
row document 数据记录行
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键啊,MongoDB自动将_id字段设置为主键

MongoDB数据库创建/删除

创建数据库: use dbname

如果数据库不存在,则创建数据库,否则切换到指定数据库。

在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

通过 db 来查看当前使用的数据库

删除数据库

db . dropDatabase()

MongoDB操作集合

  • 创建集合:

    复制代码
    db.createCollection("集合名")
  • 查看集合:

    复制代码
    show collections / show tables
  • 删除集合:

    复制代码
    db.集合名.drop()

MongoDB在集合中插入数据

  • 插入的数据被称为文档。
  • 文档的数据结构和 JSON 基本一样。
  • 所有存储在集合中的数据都是 BSON 格式。
  • BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
json 复制代码
db.col.insert({title: '一些数据', 
	description: 'MongoDB 是一个 Nosql 数据库',
	tags: ['mongodb', 'database', 'NoSQL']
})

MongoDB在集合中更新数据

更新数据:

json 复制代码
db.集合名.update({查询条件},{$set:{更新内容}},
	{
		upsert: <boolean>,
		multi: <boolean>,
	}
)

upsert: 默认为false ,如果查询不到数据,则把跟新输入插入

multi:默认为false,默认只改一条,true,更改多条

json 复制代码
db.col.update({'name':'张三'},{$set:{'name':'张三丰'}})
db.col.update({'name':'张三'},{$set:{'name':'张三丰'}},{multi:true})
db.col.update({'name':'张三'},{$set:{'name':'张三丰'}},{upsert:true,multi:true})

MongoDB在集合中删除文档

  • 删除文档:

    复制代码
    db.集合名称.remove(
    	<query>,
    	{
    		justOne: <boolean>
    	}
    )
  • 删除所有数据:

    json 复制代码
    db.col.remove({})
  • 删除一条数据:

    json 复制代码
    db.col.remove({"name":"张三"},{justOne:true})
  • 删除多条数据

    json 复制代码
    db.col.remove("name":"张三"})

MongoDB在集合中查询文档

  • MongoDB 查询文档使用 find() 方法。

  • find() 方法以非结构化的方式来显示所有文档。

    复制代码
    db.collection.find(query)
  • pretty() 方法以格式化的方式来显示所有文档,linux下有用。

    复制代码
    db.col.find().pretty()
MongoDB查询条件
MongoDB的 And条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

复制代码
db.col.find({key1:value1, key2:value2})
MongoDB的 Or条件

MongoDB OR 条件语句使用了关键字 $or

json 复制代码
db.col.find(
	{
		$or: [
			{key1: value1}, {key2:value2}
		]
	}
)
MongoDB的 And 与 Or 一起使用

AND 和 OR 联合使用,类似常规 SQL 语句为:

复制代码
where key1>value1 AND (key2 = value2 OR key3 = value3)

db.col.find({"key1": {$gt:value1}, $or: [{"key2": "value2"},{"key3": "value3"}]})
MongoDB范围条件

col"集合中 "key" 大于100,小于 200 的数据

复制代码
> db.col.find({"key" : {$lt :200, $gt : 100}})

相当于RDBMS:

复制代码
Select * from col where key>100 AND key<200;
MongoDB的模糊查询
  • 查询 name 包含"小"字的文档:

    复制代码
    db.col.find({"name":/小/})
  • 查询 name 字段以"小"字开头的文档:

    复制代码
    db.col.find({"name":/^小/})
  • 查询 name字段以"小"字结尾的文档:

    复制代码
    db.col.find({"name":/小$/})
MongoDB的Limit 和 Skip操作

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

复制代码
> db.col.find().limit(NUMBER)

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

复制代码
> db.col.find().limit(NUMBER).skip(NUMBER)
MongoDB的统计

在 MongoDB 中使用count() 来统计个数

复制代码
>db.col.count(【{key:value}】)
MongoDB的排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

复制代码
>db.col.find().sort({KEY:1})

``

MongoDB的统计

在 MongoDB 中使用count() 来统计个数

复制代码
>db.col.count(【{key:value}】)
MongoDB的排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

复制代码
>db.col.find().sort({KEY:1})
相关推荐
白帽攻防录13 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
꯭自꯭闭꯭14 小时前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课14 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司14 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk16 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea16 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
东方护航数据恢复(深圳)16 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk17 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle
PHP实战开发录19 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
红红谈说20 小时前
标签化推送与已读统计怎么做?一次通知链路的工程复盘
数据库·消息推送·数字乡村·集合运算·已读回执·标签体系·写入放大