Mongo数据库的使用教程(完全版)

MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。

目录

连接MongoDB
指定数据库与集合
插入数据
查询
计数
排序
偏移
更新
删除

连接MongoDB

import pymongo
client = pymongo.MongoClient(host="localhost",port=27017) #默认的端口号是27017,可以根据需求进行更改

指定数据库与集合

db = client.test      # 或: db = client['test'] 这里如果没有该数据库,会自动地进行新建
collection = db.first # 或: db = client['first'] 这里如果没有该集合,会自动地进行新建

插入数据

  • insert_one(): 插入一条数据
  • insert_many(): 插入多条数据
# #插入数据_一条
student = {'id':'001','name':'小红','age':20,'gender':'male'
}
result = collection.insert_one(student)
print(result)                #返回的是InsertOneResult对象
print(result.inserted_id)    #我们可以调用其inserted_id属性获取_id,这个_id是mongo自动赋给的
<pymongo.results.InsertOneResult object at 0x000002030178B380>
60fff91cbc6eb6620e54a6b7
#插入数据_多条
student1 ={'id':'002','name':'小明','age':20,'gender':'man'
}
student2 ={'id':'003','name':'小刚','age':20,'gender':'man'
}
result1 = collection.insert_many([student1,student2])
print(result1)
print(result1.inserted_ids)
<pymongo.results.InsertManyResult object at 0x0000020302213880>
[ObjectId('60fff963bc6eb6620e54a6b8'), ObjectId('60fff963bc6eb6620e54a6b9')]

查询

这里我们可以使用find_one()或find()方法进行查询

  • find_one() :返回单个结果
  • find() : 返回一个生成器对象

我们也可以限制条件进行查询

result2 = collection.find_one({'name':'小红'})
print(type(result2))
print(result2)
<class 'dict'>
{'_id': ObjectId('60fff91cbc6eb6620e54a6b7'), 'id': '001', 'name': '小红', 'age': 20, 'gender': 'male'}
results = collection.find({'age':20})
print(results)  # 返回值是cursor类型,它相当于一个生成器,我们可以遍历得到所有结果
for result in results:print(result)
<pymongo.cursor.Cursor object at 0x000002030221E6A0>
{'_id': ObjectId('60fff91cbc6eb6620e54a6b7'), 'id': '001', 'name': '小红', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('60fff963bc6eb6620e54a6b8'), 'id': '002', 'name': '小明', 'age': 20, 'gender': 'man'}
{'_id': ObjectId('60fff963bc6eb6620e54a6b9'), 'id': '003', 'name': '小刚', 'age': 20, 'gender': 'man'}
# 条件查询
# 如果要查询大于年龄值大于20的
results = collection.find({'age':{'$gt':20}})
# 也可以正则表达式进行查询
results = collection.find({'name':{'$regex':'^小.*'}})
print(results)
for result in results:print(result)
<pymongo.cursor.Cursor object at 0x000002030221E8B0>
{'_id': ObjectId('60fff91cbc6eb6620e54a6b7'), 'id': '001', 'name': '小红', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('60fff963bc6eb6620e54a6b8'), 'id': '002', 'name': '小明', 'age': 20, 'gender': 'man'}
{'_id': ObjectId('60fff963bc6eb6620e54a6b9'), 'id': '003', 'name': '小刚', 'age': 20, 'gender': 'man'}

这里我总结了一下查询匹配的比较符号和功能符号

               比较符号

符号 含义
$lt 小于 {‘age’: { ‘$lt’ : 20 } }
$gt 大于 {‘age’: { ‘$gt’ : 20 } }
$lte 小于等于 {‘age’: { ‘$lte’ : 20 } }
$gte 大于等于 {‘age’: { ‘$gte’ : 20 } }
$ne 不等于 {‘age’: { ‘$ne’ : 20 } }
$in 在范围内 {‘age’: { ‘$in’ : [20,22] } }
$nin 不在范围内 {‘age’: { ‘$nin’ : [20,24] } }

​               功能符号

符号 含义 示例 示例含义
$regex 匹配正则表达式 {‘name’:{’$regex’:’^M.*’}} name以M开头
$exists 属性是否存在 {‘name’:{’$exists’:‘True’}} name属性存在
$type 类型判断 {‘age’:{’$type’:‘int’}} age的类型为int
$mod 数字模操作 {‘age’:{’$mod’:[5,0]}} 年龄模5余0
$text 文本查询 {‘KaTeX parse error: Expected '}', got 'EOF' at end of input: text':{'search’:‘Mike’}} text类型的属性中包含Mike字符串
$where 高级条件查询 {’$where’:‘odj.fans_count == obj.follows_count’ } 自身粉丝数等于关注数

计数

# # 计数
count = collection.count_documents({'gender':'man'})
print(count)
2

排序

#排序
results = collection.find().sort('id',pymongo.DESCENDING) # pymongo.ASCENDING升序
for result in results:print(result)
{'_id': ObjectId('60fff963bc6eb6620e54a6b9'), 'id': '003', 'name': '小刚', 'age': 20, 'gender': 'man'}
{'_id': ObjectId('60fff963bc6eb6620e54a6b8'), 'id': '002', 'name': '小明', 'age': 20, 'gender': 'man'}
{'_id': ObjectId('60fff91cbc6eb6620e54a6b7'), 'id': '001', 'name': '小红', 'age': 20, 'gender': 'male'}

偏移

在某些情况下,我们可能想只取某几个元素,这时可以利用skip()方法偏移几个位置,比如偏移2,就忽略前两个元素,得到第三个及以后的元素:

#取数(偏移,限制)
# skip() : 偏移个数
# limit() : 指定要取的结果个数
results = collection.find().skip(1).limit(1)
for result in results:print(result)
{'_id': ObjectId('60fff963bc6eb6620e54a6b8'), 'id': '002', 'name': '小明', 'age': 20, 'gender': 'man'}

更新

  • update_one(): 更新一条数据
  • update_many(): 更新多条数据
#更新
# update_one()
condition = {'name':'小红'}
student = collection.find_one(condition)
student['name'] = '小丽'
result = collection.update_one(condition,{'$set':student})  # 使用$set操作符对数据进行更新
print(result)
print(result.matched_count,result.modified_count) # 获得匹配的个数和影响的个数
<pymongo.results.UpdateResult object at 0x0000020302231A80>
1 1
#update_many()
condition = {'age':20}
result = collection.update_many(condition,{'$inc':{'age':1}}) #$inc 加一操作
print(result)
print(result.matched_count,result.modified_count) # 获得匹配的个数和影响的个数
<pymongo.results.UpdateResult object at 0x0000020302231100>
3 3

删除

  • delete_one: 删除一条数据
  • delete_many: 删除多条数据
#删除一条数据
result = collection.delete_one({'name':'小明'})
print(result)
print(result.deleted_count)  #获得删除的个数
<pymongo.results.DeleteResult object at 0x000002030222C780>
1
#删除多条数据
result = collection.delete_many({'age':21})
print(result)
print(result.deleted_count)  #获得删除的个数
<pymongo.results.DeleteResult object at 0x00000203021FEF80>
2

Mongo数据库的使用教程(完全版)相关推荐

  1. win七系统如何卸载MySQL_win7系统卸载SQL2008R2数据库的详细教程

    用过SQL2008R2数据库的朋友都知道,安装起来容易卸起来麻烦,可是在win7 32位旗舰版系统就不知道怎么卸载SQL2008R2数据库了.其实卸载SQL2008R2数据库的方法也很简单,可直接通过 ...

  2. Mysql数据库的安装教程

    Mysql数据库的安装教程 一.Mysql数据库介绍 二.Mysql数据库特性 1.Mysql现状 2.Mysql的几个特点 三.Mysql数据库中术语介绍 四.检查MySQL 是否安装 1.检测系统 ...

  3. Serverless 解惑——函数计算如何访问 Mongo 数据库

    函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务 ...

  4. qt4 连接mysql_Qt4访问mysql 数据库的简单教程

    编译问题: 1.系统中安装有VC,所以头文件冲突 手工修改makefile 删除所有-I 加载VC头文件的项目 2.mysql cannot find -llibmysql 指定libmysql.a的 ...

  5. idea 父文件_万事开头难!最新MyBatis程序配置教程(IDEA版)

    文章来源:万事开头难!最新MyBatis程序配置教程(IDEA版) 原文作者:Baret~H 来源平台:CSDN 实验环境:IDEA2020.1+MySQL8.0.21+Mybatis3.5.5+Ju ...

  6. 零基础 Amazon Web Services (AWS) 入门教程图文版(三)

    原则上WDCP安装好了,就可以直接使用了,FTP.MySQL什么的应有尽有.但是本站Amazon AWS -- 免费的午餐不好吃一文中说到过这个问题,直接用WDCP的MySQL会导致EBS的I/O急剧 ...

  7. 零基础 Amazon Web Services (AWS) 入门教程图文版(四)

    自上一篇之后,5天过去了,这篇文章总算是挤出来了... 其实看不看无所谓啦,都说了WDCP非常适合小白,随便折腾.要是折腾的时候遇到什么问题,欢迎留言探讨~ 五.新建站点 登录WDCP后台,首次登录会 ...

  8. 零基础 Amazon Web Services (AWS) 入门教程图文版(一)

    现在小站唯一的流量都靠AWS这个关键词了,刚好要用AWS重新建站,所以从头开始记录一遍吧. 所谓零基础,就是你可以没有任何AWS使用经历,仍然能够按照教程操作下去.所谓图文版,就是建议手机用户在没有连 ...

  9. 【数据库取证篇】阿里云RDS MySQL数据库在线取证教程

    [数据库取证篇]阿里云RDS MySQL数据库在线取证教程 在线取证或备份数据-[蘇小沐] 文章目录 [数据库取证篇]阿里云RDS MySQL数据库在线取证教程 1.实验环境 一.RDS登录方式 (一 ...

最新文章

  1. 负载均衡算法-最少连接数均衡
  2. 【设置Oracle 11Gr2 RAC的归档模式】
  3. vue 实例化几种方式_Vue组件的三种调用方式
  4. JNI设置C++与java的结合(2)
  5. Spring定时器配置
  6. app engine_App Engine中的Google Services身份验证,第2部分
  7. 【pytorch】torch.nn.Identity()
  8. vSphere 故障排除之网络篇
  9. 算法导论 练习9.3-8两个有序数组的中位数
  10. 【JSP】JSP基础学习记录(二)—— JSP的7个动作指令
  11. 腾讯云服务器的环境配置与使用
  12. Oracle中的左连接与右连接
  13. 骑士人才系统替换短信接口
  14. Word、Excel操作技巧大全
  15. 一文详解SQL关联子查询
  16. 'Did you install mysqlclient or MySQL-python?' % e 'Did you install mysqlclient or MySQL-pyth
  17. 为找房方便,将sohu房产的rss 转成全文的!
  18. PHP开发的CRM客户关系管理系统
  19. 【Monica的android学习之路】四大组件的生命周期
  20. 阿里云服务器入门教程 (图文教程)

热门文章

  1. 我的世界Minecraft1.12.2模组开发(10)生物实体
  2. java中读取excel数据类型_在Java中读取Excel文件的内容
  3. mysql主从shardingsphere分库分表
  4. Android 平台上的感应器开发
  5. 前端 vue 实现时间尺子效果
  6. 华为系统鸿蒙多少个月不卡,华为鸿蒙系统正式领证!你会支持华为手机吗?
  7. 远程包含和本地包含漏洞的原理
  8. 如何使用iMindMap免费下载制作思维导图
  9. 2022年国内乘用车召回公告整理
  10. 鼠标滑动事件(鼠标经过换图片)