mongoDB-4

前情回顾

1. 修改器

$inc $mul $max $min
$push $pushAll $pull $pullAll $pop $addToSet $each $sort $position

2. 删除文档

deleteOne(query)
deleteMany()
remove()
findOneAndDelete()

3. 数据类型

【1】 时间类型 : new Date()
Date()
ISODate()
ValueOf()

【2】 Null : null 表示空

【3】 Object类型 :"外部域.内部域"


4. 索引操作

* 索引约束
* 创建索引

createIndex()
createIndexes()
ensureIndex()

getIndexes()
dropIndex()
dropIndexes()

5. 聚合操作

aggregate([{},{},{}....])

$group
$sum
$avg
$max
$min
$match
$limit
$skip
$sort

**************************************************
一. 聚合操作符(续)

1. $project : 选择显示的域(值的写法同field参数)

e.g. 筛选结果不显示_id
db.class0.aggregate([{$match:{}},{$project:{_id:0,Name:'$name',Age:'$age'}}])

练习: 使用grade

1. 将所有男生按照年龄升序排序,结果不显示_id

aggregate([$match:{sex:'m'},{$sort:{age:1}},{$project:{_id:0}}])

2. 将所有喜欢画画的女生按照年龄排序,取年龄最小的三个,只显示姓名,年龄,爱好

aggregate([{$match:{hobby:'draw',sex:'w'}},{$sort:{age:1}},{$limit:3},{$project:{_id:0,name:1,age:1,hobby:1}}])


二. 固定集合

定义: 指的是mongodb中创建固定大小的集合,称之为固定集合

特点: 1. 能够淘汰早期数据
2. 可以控制集合大小
3. 数据插入,查找速度快

使用 : 日志处理,临时缓存

创建 : db.createCollection(collection,{capped:true,size:10000,max:20})

capped:true 表示创建固定集合
size :10000 固定集合大小 字节
max :20 固定集合可存放文档数量

e.g. 创建固定集合log,最多存放3条文档
db.createCollection('log',{capped:true,size:1000,max:3})


三. 文件存储

1. 文件存储数据库方式

【1】 存储路径:将本地文件所在的路径以字符串存储到数据库中。

优点: 操作简单,节省数据库空间
缺点:当数据库或者文件发生变化需要修改数据库

【2】 存储文件本身:将文件转换为二进制存储到数据库中。

优点:文件绑定数据库,不容易丢失
缺点: 占用数据库空间大,文件存取效率低

2. GridFS文件存储方案

目的:更方便的存取mongodb中大文件(>16M)

说明:
1. mongodb数据库中创建两个集合共同存储文件
2. fs.files集合中为每个文件建立一个信息文档,存储文件的基本信息
3. fs.chunks集合中每个文档建立与fs.files的关联,并将文件分块存储

存储方法:
mongofiles -d dbname put file

e.g. 将Postman... 存储到grid数据库中
mongofiles -d grid put Postman.tar.gz

提取方法:
mongofiles -d dbname get file

e.g. 从数据库中获取Post...文件
mongofiles -d grid get Postman.tar.gz

优缺点 : 对大文件的存储提取方便,但是读写效率仍然比较低,不建议用来存储小文件。


四. mongo shell 对 JavaScript支持

* mongo shell界面中支持基本的JS代码
* 通过js处理mongo的一些数据逻辑


五. Python操作MongoDB

1. 第三方模块 : pymongo
安装 : sudo pip3 install pymongo

2. 操作步骤

【1】 导入模块,连接mongodb数据库

from pymongo import MongoClient
conn = MongoClient('localhost',27017)

【2】 选择要操作的数据库和集合

db = conn.stu # 选择数据库
myset = db.class0 # 选择集合

【3】 通过集合对象调用接口完成数据操作

数据书写转换:

文档 ----》 字典
数组 ----》 列表
布尔 ----》 python布尔
null ----》 None
操作符 ----》 字符串形式原样书写
$lt "$lt"

【4】 关闭数据库连接

conn.close()


3. 数据操作函数 (mongodb/mongo.py)

【1】 插入文档

insert_one() 插入一条文档
insert_many() 插入多条文档
insert() 插入一条或多条文档
save() 插入文档,如果_id重复会覆盖

【2】 查找操作

cursor = find(query,field)
功能:查找所有文档
参数:形式同mongo中 find
返回值:查找结果的游标对象

cursor对象属性

* 通过迭代获取每个查找文档结果
* 通过调用属性方法对结果进行进一步操作
next()
limit()
skip()
count()
sort([('age',1),('name',1)])

注意:
1.调用limit,skip,sort时游标必须没有遍历过
2. sort排序写法域mongoshell不同
{age:1,name:1}->[('age',1),('name',1)]


find_one(query,field)
功能:查找一个文档
参数: 同find
返回值: 文档字典

【3】 修改操作

update_one() 修改一个文档
update_many() 修改多个文档
update()

【4】 删除操作
delete_one() 删除一个文档
delete_many() 删除多个文档
remove()

【5】 复合操作

find_one_and_delete()

【6】 索引操作

create_index(index,**kwargs)
功能: 创建索引
参数: {name:1} --> [('name',1)]
kwargs 索引选项
返回值: 索引名称

list_indexes() 查看索引
drop_index() 删除索引
drop_indexes() 删除所有索引

【7】 聚合操作

cursor = aggregate([{},{}])
功能: 完成聚合操作
参数: 聚合管道,同mongo shell
返回值: 数据结果游标

4. 文件存储

import bson

1. 将文件内容转换为bson二进制格式存储

content = bson.binary.Binary(bytes)
功能: 将python字节串转换为bson格式
参数: 要转换的字节串
返回值: bson数据

2. 将bson数据 插入到mongo数据库文档中

原文地址:https://www.cnblogs.com/gyl10/p/11461049.html