6、MongoDB基本使用(mongodb使用场景 简书)
wptr33 2025-05-02 13:50 17 浏览
Mongodb
Mongodb优势
基础命令
管理
备份
恢复
数据库命令
集合命令
存储的数据
数据查询
数据增加
数据更新
数据删除
高级查询
比较运算符
范围运算符
或者
正则表达式
常用方法
自定义查询
返回指定的字段
排序
统计
去重
索引
创建索引
单利索引
联合索引
删除索引
查看索引
Python操作Mongodb
Mongodb
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组,它是一种非关系的数据库Nosql。
那么非关系带来的一个问题就是,耗存储空间,就比如10000条数据,每条数据都有一条是一样的,那么在关系型数据库的情况下,我们就可以直接使用外键的方式来进行存储,那么对于mongodb这样的非关系型数据库就需要每一条数据都进行存储,带来一定的资源浪费;
在关系型数据库下,扩展性比较差,如果我们开始定义了一些数据,后期想要改起来非常麻烦,而且在大数据下IO比较大,因为我们要查询一条数据出来可能需要连很多表才能把这个数据给完整展现出来。那对Mongodb来说,它解决这个问题就非常简单,因为它是菲关系的,数据和数据之间没有任何关联,不涉及到连表查询,同时打来的好处就是速度快,灵活性比较好,不需要预先为表做字段,直接插即可;
Mongodb优势
易扩展性:NoSQL数据库种类繁多,但是一个共同的特点就是去掉关系型数据库的关系特性,数据之间无关系,这样就非常易于扩展;
性能高:在大数据量的情况下表现优秀,NoSQL数据库都具有非常搞的读写性能,尤其是在大数据量下,这得益于它的无关系性,数据库结构简单;
灵活性:NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系型数据库里,增删字段是一见非常麻烦的事情;
基础命令
管理
管理包含数据备份和恢复;
备份
mongodump -h dbHost -d dbName -o backupDir
恢复
mongorestore -h dbHost -d dbName --dir backupDir
数据库命令
show dbs:查看库;
use:切换数据库;
db:查看当前数据库;
db.dropDatabase():删除当前数据库;
集合命令
show collections:查看当前数据库的所有集合;
db.集合名称.drop():删除集合;
db.createCollection("cce"):创建一个集合;
存储的数据
Object ID:文档ID;
每个文档都有一个_id,保证文档的唯一性,如果没有显示定义,那么mongodb会自动生成;
Sting:字符串,必须是有效的utf8;
Boolean:存储一个布尔类型,true或false;
Integer:整形可以是32位或者64位;
Double:存储浮点数;
Arrays:数组或者列表,多个值存储到一个文档;
Object:用于嵌入式的文档,即一个值为一个文档;
Null:存储null值;
Timestamp:时间戳;
Date:存储当前时间或者时间的unix格式;
创建日期的语句:new Date('2018-01-15') # 需要传入一个时间;
数据查询
db.集合名称.find():查找指定的数据,如果没有给定查询条件,默认查询所有, db.caichangen.find({"age":18})这是一个给定条件的示例;
数据增加
db.caichangen.insert({"name":"cce","age":18}) # 增加一条数据{"name":"cce","age":18}) # 如果数据已存在那么会抛出错误;
db.caichangen.save({"name":"cce","age":18}) # 增加一条数据{"name":"cce","age":18}) # 如果已存在就更新,如果不存在那么就插入;
数据更新
语法:db.集合名称.update(<query>,<update>,{multi:<boolean>})
更新一条数据:db.caichangen.update({},{age:30}) | db.caichangen.update({},{$set:{age:30}})
条件更新:db.caichangen.update({age:20},{age:30})
批量更新:db.caichangen.update({age:20},{$set:{age:30}},{multi:true})
数据删除
语法:db.集合名称.remove(<query>,{justOne:<Boolean>})
query:查询条件;
justOne:布尔值,为true删除一条,默认false删除所有数据;
删除匹配条件的所有:db.caichangen.remove({age:30},{justOne:false})
高级查询
find:查询,可以在后面加上pretty()将结果格式化;
findOne:查询,返回第一个集合,可以在后面加上pretty()将结果格式化;
比较运算符
等于:默认是等于判断,没有运算符;
$lt:小于;
$lte:小于等于;
$gt:大于;
$gte:大于等于;
$ne:不等于;
语法:db.caichangen.find({age:{$lt:18}})
范围运算符
$in:是否在某个范围内;
$nin:是否在某个范围内;
语法:db.caichangen.find({age:{$in:[18,19]}})
或者
and:并且;
$or:值为数组,数组中每个元素为json;
语法:db.caichangen.find({$or:[{age:18},{name:"cce"}]})
查询姓名为cce或者cfj并且年龄是18的:db.caichangen.find({$or:[{name:"cfj"},{name:"cce"}],age:18})
正则表达式
使用//或者$regex编写正则表达式;
语法:
db.caichangen.find({name:/^c/})
db.caichangen.find({name:{$regex:'e#39;}})
常用方法
limit:限制返回指定数量的文档;
db.caichangen.find().limit(Number)
skip:用于跳过指定数量的文档;
db.caichangen.find().skip(Number)
同时使用:
db.caichangen.find().limit(Number).skip(Number)
自定义查询
使用$where后面写一个函数,返回满足条件的数据;
示例:
db.caichangen.find({$where:function(){return this.age>30;}})
返回指定的字段
语法:db.集合名称.find({},{字段:0/1}) # 0不显示,1显示;
示例:
db.caichangen.find({name:{$regex:'e#39;}},{age:1,_id:0})
排序
sort:sort可以在返回结果集后进行排除处理,传入一个1或者-1,1升序,-1降序;
示例:
db.caichangen.find().sort({age:1})
统计
count:可以对结果集进行统计,也可以直接统计集合;
示例:
db.caichangen.find().count()
db.caichangen.count({age:{$gt:20}})
去重
distinct:可以对结果集进行去重;
语法:
db.集合名称.distinct('去重字段':{条件})
示例:
db.stu.distinct('age':{age:{$gt:18}})
索引
建立索引提升查询速度,默认情况下mongodb会自动将_id字段设置为索引;
创建索引
单利索引
测试:插入10万条数据到数据库中
for(var i=0;i<100000;i++){db.caichangen.insert({name:"cce"+i,age:i})}
测试:
db.caichangen.find({'name':'cce10000'}) # 测试查询
db.caichangen.find({'name':'cce10000'}).explain('executionStats') # 查看上面查询语句的执行状态信息,executionTimeMillis是查询时间;
创建索引:
语法:db.集合名称.ensureIndex({属性:1/-1}) # 1表示升序,-1表示降序,-1的使用场景是经常使用sort来操作数据;
示例:db.caichangen.ensureIndex({name:1})
联合索引
语法:db.集合名称.ensureIndex({属性:1/-1,属性:1/-1})
删除索引
语法:db.集合名称.dropIndex('索引名称')
查看索引
语法:db.集合名称.getIndexs()
Python操作Mongodb
安装:pip install pymongo
from pymongo import MongoClient
client = MongoClient(host='192.168.1.254', port=27017) # 初始化一个client对象,拿到一个连接初始化信息
collection = client['cce']['caichangen'] # 指定要连接的库和集合
# 清空数据库
collection.drop()
# 插入单条数据
date = {"_id": 1, "name": "cce0", "age": 100}
collection.insert(date)
# 插入多条数据
data_many=[{"name": "name" + str(1000+i), 'age': i} for i in range(10)] # 创建数据
collection.insert_many(data_many) # 多条插入
# 查询所有数据
result=collection.find({'name':'cce0'}) # 返回一个游标对象,它是一个可迭代对象,当游标走到最后的时候那么就获取不到数据了,和我们的生成器一样;
for i in result:
print(i)
# 查询一条数据
result=collection.find_one({'name':'cce0'})
print(i)
# 更新一条数据
collection.update_one({'name':'cce0'},{"$set":{'name':'caichangen'}})
# 更新所有数据
collection.update_many({'name':'cce0'},{"$set":{'name':'caichangen'}})
相关推荐
- 栋察宇宙(二十一):Python 文件操作全解析
-
分享乐趣,传播快乐,增长见识,留下美好。亲爱的您,这里是LearingYard学苑!...
- python中12个文件处理高效技巧,不允许你还不知道
-
在Python中高效处理文件是日常开发中的核心技能,尤其是处理大文件或需要高性能的场景。以下是经过实战验证的高效文件处理技巧,涵盖多种常见场景:一、基础高效操作...
- Python内置模块bz2: 对 bzip2压缩算法的支持详解
-
目录简介知识讲解2.1bzip2压缩算法原理2.2bz2模块概述...
- Python文件及目录处理方法_python目录下所有文件名
-
Python可以用于处理文本文件和二进制文件,比如创建文件、读写文件等操作。本文介绍Python处理目录以及文件的相关方法。...
- The West mustn't write China out of WWII any longer
-
ByWarwickPowellLead:Foreightdecades,theWesthasrewrittenWorldWarIIasanAmericanandEuro...
- Python 的网络与互联网访问模块及应用实例(一)
-
Python提供了丰富的内置模块和第三方库来处理网络与互联网访问,使得从简单的HTTP请求到复杂的网络通信都变得相对简单。以下是常用的网络模块及其应用实例。...
- 高效办公:Python处理excel文件,摆脱无效办公
-
一、Python处理excel文件1.两个头文件importxlrdimportxlwt...
- Python进阶:文件读写操作详解_python对文件的读写操作方法有哪些
-
道友今天开始进阶练习,来吧文件读写是Python编程中非常重要的技能,掌握这些操作可以帮助你处理各种数据存储和交换任务。下面我将详细介绍Python中的文件读写操作。一、基本文件操作...
- [827]ScalersTalk成长会Python小组第11周学习笔记
-
Scalers点评:在2015年,ScalersTalk成长会完成Python小组完成了《Python核心编程》第1轮的学习。到2016年,我们开始第二轮的学习,并且将重点放在章节的习题上。Pytho...
- ScalersTalk 成长会 Python 小组第 9 周学习笔记
-
Scalers点评:在2015年,ScalersTalk成长会完成Python小组完成了《Python核心编程》第1轮的学习。到2016年,我们开始第二轮的学习,并且将重点放...
- 简析python 文件操作_python对文件的操作方法
-
一、打开并读文件1、file=open('打开文件的路径','打开文件的权限')#打开文件并赋值给file#默认权限为r及读权限str=read(num)读文件并放到字符串变量中,其中num表...
- Python 中 必须掌握的 20 个核心函数——open()函数
-
open()是Python中用于文件操作的核心函数,它提供了读写文件的能力,是处理文件输入输出的基础。一、open()的基本用法1.1方法签名...
- python常用的自动化脚本汇总_python 自动脚本
-
以下是python常用的自动化脚本,包括数据、网络、文件、性能等操作。具体内容如下:数据处理工具网络检测工具系统任务自动化工具测试自动化工具文件管理自动化工具性能监控工具日志分析工具邮件...
- Python自动化办公应用学习笔记37—文件读写方法1
-
一、文件读写方法1.读取内容:read(size):读取指定大小的数据,如果不指定size,则读取整个文件。...
- 大叔转行SAP:好好学习,好好工作,做一个幸福的SAP人
-
我是一个崇尚努力的人,坚定认为努力可以改变命运和现状,同时也对自己和未来抱有非常高的期待。随着期待的落空,更对现状滋生不满,结果陷入迷茫。开始比较,发现周围人一个个都比你有钱,而你的事业,永远看不到明...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
Java面试必考问题:什么是乐观锁与悲观锁
-
如何将AI助手接入微信(打开ai手机助手)
-
redission YYDS spring boot redission 使用
-
SparkSQL——DataFrame的创建与使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
-
- 栋察宇宙(二十一):Python 文件操作全解析
- python中12个文件处理高效技巧,不允许你还不知道
- Python内置模块bz2: 对 bzip2压缩算法的支持详解
- Python文件及目录处理方法_python目录下所有文件名
- The West mustn't write China out of WWII any longer
- Python 的网络与互联网访问模块及应用实例(一)
- 高效办公:Python处理excel文件,摆脱无效办公
- Python进阶:文件读写操作详解_python对文件的读写操作方法有哪些
- [827]ScalersTalk成长会Python小组第11周学习笔记
- ScalersTalk 成长会 Python 小组第 9 周学习笔记
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)