前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day120-day121-MongoDB的基础增删改查&pymongo的使用

day120-day121-MongoDB的基础增删改查&pymongo的使用

原创
作者头像
少年包青菜
修改2020-04-29 11:39:24
3.1K0
修改2020-04-29 11:39:24
举报
文章被收录于专栏:Python 学习Python 学习

1.MongoDB与MySQL的对比

代码语言:javascript
复制
# 与MySQL的对比
MySQL				MongoDB
DB					DB
table				Collections   # 表
row					Documents     # 行<单条数据>
column				Field         # 字段

2.MongoDB支持的字段数据类型

代码语言:javascript
复制
# 支持的数据类型
String      # 字符串,必须是utf-8 
Boolean     # 布尔值,true 或者 false (这里有坑哦~在我们大Python中 True False 首字母大写)
Integer     # 整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
Double      # 浮点数 (没有float类型,所有小数都是Double)
Arrays      # 数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
Object      # 就是Python中的字典,这个数据类型就是字典
Null        # 空数据类型 , 一个特殊的概念,None Null
Timestamp   # 时间戳
Date        # 存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

3.MongoDB 语言

代码语言:javascript
复制
# 一般 cmd 的操作
# use db        # 使用db数据库
# show dbs      # 查看当前服务器中写在磁盘上的数据库
# show tables   # 查看数据库中的collection
# db            # 查看当前使用的数据库

3.1 增

代码语言:javascript
复制
# insertOne
# 插入单条数据
# db.user_info.insertOne({name:'leon', age:22})  
代码语言:javascript
复制
# insertMany
# 插入多条数据
# db.user_info.insertMany([{name:'zhangsan', age:11}, {name:'lisi', age:22}])

3.2 删

代码语言:javascript
复制
# 清空表内容
# db.表名.drop()
代码语言:javascript
复制
# deleteOne
# 删除单条数据
# 删除 age=44 的
# db.user_info.deleteOne({age:44})
代码语言:javascript
复制
# deleteMany
# 删除多条数据
# 删除名字是 'zhangsan' 或者 'lisi' 的
# db.user_info.deleteMany({name:{$in: ['zhangsan', 'lisi']}})

3.3 改

代码语言:javascript
复制
# updateOne
# 修改单条数据
# 将名字叫 'zhangsan' 的 age 设定为 123
# 如果不存在 age 则增加一组键值 {'age':123}
# db.user_info.updateOne({name:'zhangsan'},{$set:{age:123}})
代码语言:javascript
复制
# updateMany
# 修改多条数据
# 将名字是 'lisi' 或者 'zhangsan' 的 age 全部改成 250
# 如果不存在 age 则全部增加一组键值 {'age':123}
# db.user_info.updateMany({name:{$in: ['lisi','zhangsan']}},{$set:{age:250}})

3.4 查

代码语言:javascript
复制
# 普通field 条件查询
db.user_info.find({age:11})
代码语言:javascript
复制
# or 条件查询
# 查询 name='lisi' 或者 age=11 的
db.user_info.find({$or: [{name:'lisi'},{age:11}]})
代码语言:javascript
复制
# and 
# 查询 name='lisi' 并且 age=11 的
db.user_info.find({$and: [{name:'lisi'}, {age:22}]})

4.条件筛选

4.1 and & or

代码语言:javascript
复制
# and 
# 查询 name='lisi' 并且 age=11 的
db.user_info.find({$and: [{name:'lisi'}, {age:22}]})
代码语言:javascript
复制
# or 条件查询
# 查询 name='lisi' 或者 age=11 的
db.user_info.find({$or: [{name:'lisi'},{age:11}]})

4.2 in & all

代码语言:javascript
复制
# in
# field 是 查询条件的子集
# 查询 age 在 11,22,44 里面的
# db.user_info.find({age:{$in: [11,22,44]}})
代码语言:javascript
复制
# all
# 查询条件是 field 的子集
# 查询 1,2,3 三个数字同时是哪些人喜欢的数字
# db.user_info.find({favourite_num:{$all: [1,2,3]}})

4.3大于、大于等于、小于等于、小于、等于

代码语言:javascript
复制
# 查询 age=100 的
# db.user_info.find({age:{$gt:100}})
    -- $gt    # 大于
    -- $gte   # 大于等于
    -- $lt    # 小于
    -- $lte   # 小于等于
    -- $eq    # 等于

5. $ 修改器详解

5.1 $set

代码语言:javascript
复制
# 将名字叫 'zhangsan' 的 age 设定为 123
# 如果不存在 age 则增加一组键值 {'age':123}
# db.user_info.updateOne({name:'zhangsan'},{$set:{age:123}})
代码语言:javascript
复制
# 全部 修改/添加一组键值
# db.user_info.updateMany({条件},{$set:{age:111}})

5.2 $unset

代码语言:javascript
复制
# 删除一组键值
# 将名字叫 'zhangsan' 的 {hobby:'girl'} 删除掉
# db.user_info.updateOne({name:'zhangsan'},{$unset:{hobby:'girl'}})

5.3 $inc

代码语言:javascript
复制
# field 累加
# 每执行一次,age 字段就 +1
# db.user_info.updateOne({name:'zhangsan'},{$inc:{age:1}})
代码语言:javascript
复制
# 全部累加
# db.user_info.updateMany({条件},{$inc:{age:1}})

5.4 对于 Array 数组的操作

5.4.1 $push

代码语言:javascript
复制
# 给数组添加一个 250
# db.user_info.updateOne({name:'zhangsan'},{$push: {hobby:250}})
代码语言:javascript
复制
# 全部添加
# db.user_info.updateMany({条件},{$push: {hobby:250}}) 

5.4.2 $pull

代码语言:javascript
复制
# 将数组的 250 删除掉
# db.user_info.updateOne({name:'zhangsan'},{$pull:{hobby:250}})
代码语言:javascript
复制
# 全部删除
# db.user_info.updateMany({条件},{$pull: {hobby:250}})

5.4.3 $pop

代码语言:javascript
复制
# 根据数组下表索引删除
# -1 代表第一个,1 代表最后一个,且只支持第一个和最后一个
# db.user_info.updateOne({name:'zhangsan'},{$pop:{hobby:1}})
代码语言:javascript
复制
# 全部删除
# db.user_info.updateMany({},{$pop:{hobby:1}})

5.4.5 $ 单美元符表示下标

代码语言:javascript
复制
# 将 'zhangsan' 的 hobby 数组里的 100 改成 250
# hobby 的 100 对应的索引会在市保存在 $ 里面,hobby.$ 会根据下标找到这个值并替换
# db.user_info.updateOne({name:'zhangsan', hobby:100},{$set: {'hobby.$':250}})
代码语言:javascript
复制
# 全部修改
# db.user_info.updateMany({hobby:1},{$set: {'hobby.$':250}})

5.5 对 dict 字典的操作

代码语言:javascript
复制
# info 是一个字典
# 将字典的 'weight' 改成 255
# db.user_info.updateOne({name:'zhangsan'},{$set:{'info.weight':255}})
代码语言:javascript
复制
# 全部修改
# db.user_info.updateMany({条件},{$set:{'info.weight':255}})

5.6 数组嵌套字典

代码语言:javascript
复制
# 结构如下
{
	"_id" : ObjectId("5ea68688c178ca4438536715"),
	"name" : "hehehe",
	"age" : 112,
	"info" : [
		100,
		{
			"weight" : 100,
			"height" : 175
		}
	]
}
代码语言:javascript
复制
# 找到  'info.weight':111 所在字典对应的下标保存在 $ 里面,info.下标.属性 重新赋值
# db.user_info.updateOne({name:'张三', 'info.weight':111},{$set:{'info.$.height':250}})

5.7 limit 、skip 、sort 的使用以及分页的实现

5.7.1 limit

代码语言:javascript
复制
# db.user_info.find({}).limit(5)
# 选取数据从当前位置选择5个

5.7.2 skip

代码语言:javascript
复制
# db.user_info.find({}).skip(2) 
# 从0开始跳过2条数据为当前位置

5.7.3 sort

代码语言:javascript
复制
# db.user_info.find({}).sort({ id:-1 })
# 根据ID进行排序 -1倒叙 1正序

5.7.4 分页

代码语言:javascript
复制
# limit+skip+sort实现查询分页
# db.user_info.find({}).limit(5).skip(10)
# db.user_info.find({}).limit(c).skip((p-1)*c)
	
# db.user_info.find({}).limit(5).skip(5).sort({ id:-1 })
代码语言:javascript
复制
优先级最高的是 sort 
其次优先为 skip
最低优先级 limit

6.pymongo 对 MongoDB 的增删改查

6.1创建连接

代码语言:javascript
复制
import pymongo
# 根据 str 类型的 ObjectId 查询数据
from bson import ObjectId

# 创建连接
mongo_conn = pymongo.MongoClient(host='localhost', port=27017)
# 连接到 db1 的库
mongo_cli = mongo_conn['db1']

6.2 增

代码语言:javascript
复制
# 创建一条数据
# mongo_cli.user_info.insert_one({'name': 'leon', 'age': 10})
代码语言:javascript
复制
# 创建多条数据
# mongo_cli.user_info.insert_many([{'name': 'leon', 'age': 20}, {'name': 'bob', 'age': 18}])

6.3 删

代码语言:javascript
复制
# 删除单条数据
# mongo_cli.user_info.delete_one({'name': 'leon'})
代码语言:javascript
复制
# 删除多条数据
# mongo_cli.user_info.delete_many({'name': {'$in': ['leon', 'bob']}})

6.4 改

代码语言:javascript
复制
# 修改单条数据
# mongo_cli.user_info.update_one({'name': 'leon'}, {'$set': {'age': 666}})
代码语言:javascript
复制
# 修改多条数据
# mongo_cli.user_info.update_many({'name': {'$in': ['leon', 'bob']}}, {'$set': {'age': 120}})

6.5 查 & 如何根据 str 类型的 ObjectId 查询数据

代码语言:javascript
复制
# from bson import ObjectId
# res = mongo_cli.user_info.find({'name': {'$in': ['leon', 'bob']}})
# for i in res:
#     print(i)
# 如何根据 str 类型的 ObjectId 查询数据

# 测试,生成一个 str 的 ObjectId
# obj_id = str(mongo_cli.user_info.find_one({'name': 'leon'})['_id'])
# 嵌套即可
# res = mongo_cli.user_info.find_one({'_id': ObjectId(obj_id)})
# print(res)

6.6 Python 从 MongoDB 中取出数据修改后再提交

代码语言:javascript
复制
# 取 MongoDB 数据直接更新再根据 _id 提交
res = mongo_cli.user_info.find_one({'name': 'leon'})  # type: dict
res['name'] = 'Belmont'
res['age'] = 18
res['hobby'] = ['game', 'girl']
mongo_cli.user_info.update_one({'_id': res.get('_id')}, {'$set': res})

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.MongoDB与MySQL的对比
  • 2.MongoDB支持的字段数据类型
  • 3.MongoDB 语言
    • 3.1 增
      • 3.2 删
        • 3.3 改
          • 3.4 查
          • 4.条件筛选
            • 4.1 and & or
              • 4.2 in & all
                • 4.3大于、大于等于、小于等于、小于、等于
                • 5. $ 修改器详解
                  • 5.1 $set
                    • 5.2 $unset
                      • 5.3 $inc
                        • 5.4 对于 Array 数组的操作
                          • 5.4.1 $push
                          • 5.4.2 $pull
                          • 5.4.3 $pop
                          • 5.4.5 $ 单美元符表示下标
                        • 5.5 对 dict 字典的操作
                          • 5.6 数组嵌套字典
                            • 5.7 limit 、skip 、sort 的使用以及分页的实现
                              • 5.7.1 limit
                              • 5.7.2 skip
                              • 5.7.3 sort
                              • 5.7.4 分页
                          • 6.pymongo 对 MongoDB 的增删改查
                            • 6.1创建连接
                              • 6.2 增
                                • 6.3 删
                                  • 6.4 改
                                    • 6.5 查 & 如何根据 str 类型的 ObjectId 查询数据
                                      • 6.6 Python 从 MongoDB 中取出数据修改后再提交
                                  相关产品与服务
                                  云数据库 MongoDB
                                  腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档