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})
相关推荐
haixingtianxinghai16 分钟前
Redis的定期删除和惰性删除
数据库·redis·缓存
资深web全栈开发17 分钟前
PostgreSQL Schema 最佳实践:架构师的命名与组织艺术
数据库·postgresql
麦聪聊数据1 小时前
利用实时数据管道与 SQL2API 重构企业自动化审计架构
数据库·sql·低代码
麦聪聊数据1 小时前
重构开放生态:利用 QuickAPI 跨越遗留系统与敏捷交付的工程实践
数据库·sql·低代码·restful
百结2146 小时前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY6 小时前
时区问题解决
数据库
Leinwin6 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695056 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水6 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat7 小时前
MySQL 服务基础
数据库·mysql