网站开发的基本知识,青岛建设网站制作,wordpress 优酷视频,wordpress展示模板一.mongodb是什么#xff1f;
MongoDB是一个NoSQL的非关系型数据库 #xff0c;支持海量数据存储#xff0c;高性能的读写
1.mongo的体系结构
SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档colum…
一.mongodb是什么
MongoDB是一个NoSQL的非关系型数据库 支持海量数据存储高性能的读写
1.mongo的体系结构
SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持primary keyprimary key主键,MongoDB自动将_id字段设置为主键
2. mongoDB的特点(或使用场景) 支持存储海量数据(例如直播中的打赏数据) 支持频繁的数据读写例如游戏道具 数据安全性不高存在数据误差(丢失数据) mongoDB不支持多表操作不支持事务 mongoDB使用Bson存储格式支持动态字段管理
3. mongoDB与mysql、redis对比
与redis对比
1. redis纯内存数据库内存不足时触发淘汰策略mongoDB使用内存加磁盘的存储策略具有高扩展性
2. mongoDB使用Bson存储格式支持动态字段管理方便扩展
与mysql对比
1. mongoDB不支持多表操作不支持事务
2. mongoDB使用Bson存储格式支持动态字段管理
查询效率对比
Redis MongoDB MySQL
4. mongoDB存储原理 mongoDb采用内存加磁盘的方式存储数据 mongoDb支持数据分片当单一的服务器中磁盘不够用的时候还可以串联其他服务器 客户端的请求到达内存时先在日志中记录下操作记录然后再去操作内存 内存中的日志每10ms向磁盘中的日志进行同步一次数据则每分钟同步一次 客户端先去内存中查询数据内存中没有再去查询磁盘 当客户端写入的时候会先写入到内存中内存中写入后请求直接返回内存中的数据会根据同步策略同步到磁盘 如果机器宕机在重启服务的时候会解析磁盘中的日志和磁盘中的数据进行对比将未入到磁盘中的数据写入磁盘但可能会丢失10ms的数据
二. 使用docker安装mongo
1.安装
1.拉取mongo镜像 docker pull mongo:4.4
2. 创建mongo数据持久化目录
mkdir -p /docker_volume/mongodb/data
3. 运行容器
docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth -v: 将宿主机的/docker_volume/mongodb/data映射到容器的/data/db目录将数据持久化到宿主机以防止删除容器后容器内的数据丢失 –auth需要密码才能访问容器服务 2.创建用户
1. 登录mongo容器并进入到【admin】数据库 docker exec -it mongo mongo admin
2. 创建一个用户mongo 默认没有用户
db.createUser({ user:root,pwd:123456,roles:[ { role:userAdminAnyDatabase, db: admin},readWriteAnyDatabase]}); 【user:‘root’ 】设置用户名为root 【pwd:‘123456’】设置密码为123456 【role:‘userAdminAnyDatabase’】只在admin数据库中可用赋予用户所有数据库的userAdmin权限 【db: ‘admin’】可操作的数据库 【‘readWriteAnyDatabase’】赋予用户读写权限 dbAdmin允许用户在指定数据库中执行管理函数如索引创建、删除查看统计或访问system.profile 3. 连接、测试
1. 连接mongo数据库
db.auth(root, 123456)
2. 测试数据库插入一条语句 db.user.insert({name:zhangsan,age:18})
3. 测试数据库查询刚才插入的语句 db.user.find()
4.navicat连接测试 三. 项目使用mongodb
1. 常用命令
#查看已经存在的数据库
show dbs;
#创建数据库
use 数据库名
#删除数据库
db.dropDatabase()
#查看集合
show collections;
#创建集合
db.createCollection(news)
#删除集合
db.runoob.drop()
#添加数据
db.集合名.insert({id:1,title:12})
#查询所有
db.集合名.find()
#删除数据
db.集合名.remove({id:1})
#条件查询
db.集合名.find({id:1})2. pymongo使用
1. 安装
pip install pymongo
2. pymysql连接
import pymongo
from urllib import parse
username parse.quote_plus(mofang) # 对用户名进行编码
password parse.quote_plus(123456) # 对密码进行编码
database mofang # 数据库名称
host 127.0.0.1
port 27017
mongo pymongo.MongoClient(mongodb://%s:%s%s:%s/%s % ( username, password, host, port, database))
3. 数据库操作
import pymongo# 数据库连接
mongo pymongo.MongoClient(mongodb://127.0.0.1:27017/)# 创建数据库
my_db mongo[my_db] # 没有往集合里面保存文档之前mongdb不会真正创建集合!# 查看数据库列表
print(mongo.list_database_names()) # 上面的 my_db 因为没有内容所以没有被创建的。
4. 集合操作
import pymongomongo pymongo.MongoClient(mongodb://127.0.0.1:27017/)
my_db mongo[my_db]my_collection my_db[my_collection] # 没有往集合里面保存文档之前mongdb不会真正创建集合!# 查看集合列表
print(my_db.list_collection_names())# 删除集合
my_collection.drop() # 删除成功返回true如果集合不存在返回false
5. 添加
import pymongo
mongo pymongo.MongoClient(mongodb://127.0.0.1:27017/)
my_db mongo[my_db]
my_collection my_db[my_collection]# 添加一个文档
document { name: xiaoming, mobile: 13012345678,age:16}
ret my_collection.insert_one(document)
print(ret.inserted_id) # 返回InsertOneResult对象
# 插入文档时如果没有指定_id将自动分配一个唯一的id。# 添加多个文档
document_list [{ name: xiaoming, mobile: 13033345678,age:17},{ name: xiaohong, mobile: 13044345678,age:18},{ name: xiaohei, mobile: 13612345678,age:18},
]
ret my_collection.insert_many(document_list)# 打印文档_id值列表:
print(ret.inserted_ids)
6. 删除
import pymongomongo pymongo.MongoClient(mongodb://127.0.0.1:27017/)
my_db mongo[my_db]
my_collection my_db[my_collection]# 删除一个文档
query {name:xiaoming}
my_collection.delete_one(query)# 删除多个文档
query { mobile: {$regex: ^130} }
ret my_collection.delete_many(query)
print(删除了%d个文档 % ret.deleted_count)import pymongo
from urllib.parse import quote_plusfrom bson import ObjectIdif __name__ __main__:username quote_plus(mofang)password quote_plus(123456)# 获取数据库连接对象mongo pymongo.MongoClient(fmongodb://{username}:{password}127.0.0.1:27017/mofang)mofang mongo[mofang]user_list mofang[user_list]删除文档query {_id: ObjectId(60d925e127bd4b7769251002)}ret user_list.delete_one(query)print(ret)print(ret.deleted_count)删除多个文档query {name: xiaolan}ret user_list.delete_many(query)print(ret.deleted_count)
7. 更新
import pymongomongo pymongo.MongoClient(mongodb://127.0.0.1:27017/)
my_db mongo[my_db]
my_collection my_db[my_collection]# 更新一个文档
query { name: xiaoming }
data { $set: { age: 18 } }
my_collection.update_one(query, data)# 更新所有文档
query { mobile: {$regex: ^130} }
data { $set: { age: 18 } }
my_collection.update_many(query, data)
8. 查询
import pymongomongo pymongo.MongoClient(mongodb://127.0.0.1:27017/)
my_db mongo[my_db]
my_collection my_db[my_collection]# 查看一个文档
ret my_collection.find_one()
print(ret)# 查看所有文档
for document in my_collection.find():print(document)# 查看文档部分字段find和find_one的第二个参数表示控制字段的显示隐藏1为显示0为隐藏
for document in my_collection.find({},{ _id: 0, name: 1, mobile: 1 }):print(document)# 条件查询
query { age: 18 }
document_list my_collection.find(query)
for document in document_list:print(document)# 比较运算符
query { age: {$gt:17} }
document_list my_collection.find(query)
for document in document_list:print(document)# 排序显示
# 单个字段排序
# sort(键, 1) 升序
# sort(键,-1) 降序# 多个字段排序
# sort([(键1,1),(键2,-1)])
document_list my_collection.find().sort(age)
for document in document_list:print(document)# 限制查询结果数量
document_list my_collection.find().limit(3)
print(document_list)# 偏移、跳过
# skip(int)
document_list my_collection.find().limit(3).skip(3) # 从第3篇文档开始获取3篇文档
print(document_list)# 自定义条件函数
document_list my_collection.find({$where:this.age18})
print(document_list)
select o.create_time,o.status,o.account,od.name,od.count,od.price from orders as o inner join detail as od on o.numberod.order_id where userido.userid order by o.create_time desc
评价