兰州建设局网站,网站建设衤金手指花总十五,华为域名购买,wordpress diyzhanMongoDB概念
MongoDB是一个文档数据库#xff08;以 JSON 为数据模型#xff09;#xff0c;由C语言编写#xff0c;旨在为WEB应用提供可扩展的高性能数据存储解决方案。
原则上 Oracle 和 MySQL 能做的事情#xff0c;MongoDB 都能做#xff08;包括 ACID 事务#x…MongoDB概念
MongoDB是一个文档数据库以 JSON 为数据模型由C语言编写旨在为WEB应用提供可扩展的高性能数据存储解决方案。
原则上 Oracle 和 MySQL 能做的事情MongoDB 都能做包括 ACID 事务。
MongoDB vs 关系型数据库
SQLMongoDB数据库database数据库database表table集合collection行row文档document列column字段field索引index索引index主键primary key_id视图view视图view表连接tablejoin聚合操作$lookup
MongoDB环境搭建 #启动命令
mongod -f /data/mongodb/conf/mongo.conf --auth
#关闭服务
mongod --port27017 --dbpath/data/mongodb/data --shutdown #客户端
mongosh
#进入 mongosh 后
use admin
db.shutdownServer()MongoDB命令操作
# 数据库操作
#查看所有库
show dbs
# 切换到指定数据库不存在则创建
use test
# 删除当前数据库
db.dropDatabase()# 集合操作
#查看集合
show collections
#创建集合
db.createCollection(emp)
#删除集合
db.emp.drop()# 用户管理
# 设置管理员用户名密码需要切换到admin库
use admin
#创建管理员
db.createUser({user:lyw,pwd:123456,roles:[root]})
# 查看当前数据库所有用户信息
show users
#显示可设置权限
show roles
#显示所有用户
db.system.users.find()
#删除指定用户
db.dropUser(lyw)
#删除当前数据库所有用户db.dropAllUser()# 权限管理
db.grantRolesToUser( lyw , [ { role: clusterAdmin, db: admin } ,{ role: userAdminAnyDatabase, db: admin},{ role: readWriteAnyDatabase, db: admin} ])# 执行js脚本导入数据
load(books.js)# 文档操作 #保证数据不丢失 设置 writeConcern 参数的示例
#- w指定写入确认级别。如果指定为数字则表示要等待写入操作完成的节点数。如果指定为 majority则表示等待大多数节点完成写入操作。默认为 1表示等待写入操作完成的节点数为 1。
#- j表示写入操作是否要求持久化到磁盘。如果设置为 true则表示写入操作必须持久化到磁盘后才返回成功。如果设置为 false则表示写入操作可能在数据被持久化到磁盘之前返回成功。默认为 false。
#- wtimeout表示等待写入操作完成的超时时间单位为毫秒。如果超过指定的时间仍然没有返回确认信息则返回错误。默认为 0表示不设置超时时间。
db.emps.insertOne({ name: fox, age: 35},{writeConcern: { w: majority, j: true, wtimeout: 5000 }}
)#批量新增文档
db.emps.insertMany([{ name: xiaming, age: 18},{ name: xiaming, age: 18},{ name: xiaming, age: 18},{ name: xiaming, age: 18},{ name: xiaming, age: 18},{ name: wangwu, age: 80},{ name: wangwu, age: 80, area:[beijing,shanghai]}],{writeConcern: { w: majority, j: true, wtimeout: 5000 }}
)#查询集合中的第一个文档
db.emps.findOne({_id:ObjectId(653a730e3c8a14a69c559e6b)})
db.emps.findOne({age:{$gt:60}})
#查询age大于60的文档
db.emps.find({age:{$gt:60}})
db.emps.find({age:{$gt:60},area:{$in:[beijing]}})#更新文档
db.emps.updateOne({_id:ObjectId(653a730e3c8a14a69c559e6b)},{$inc:{age:1}})
db.emps.updateMany({name:xiaming},{$set:{age:10}})#findAndModify兼容了查询和修改指定文档的功能
db.emps.findAndModify({query:{_id:ObjectId(653a730e3c8a14a69c559e6b)},update:{name:jiutian},new: true
})#删除文档
db.emps.deleteOne ({ name:jiutian })
#删除集合下全部文档
db.emps.deleteMany ({}) # 批量操作 bulkwrite()
#- insertOne - updateOne - updateMany - replaceOne - deleteOne - deleteMany
db.emps.bulkWrite( [{ insertOne: { document: { _id: 3, type: beef, size: medium, price: 6 } } },{ insertOne: { document: { _id: 4, type: sausage, size: large, price: 10 } } },{ updateOne: {filter: { type: cheese },update: { $set: { price: 8 } }} },{ deleteOne: { filter: { type: pepperoni} } },{ replaceOne: {filter: { type: vegan },replacement: { type: tofu, size: small, price: 4 }} }] )
处理分页问题 – 巧分页
应该避免使用skip/limit形式的分页。使用查询条件唯一排序条件
固定封顶集合
保证数据库只会存储“限额”的数据超过该限额的旧数据都会被丢弃。
#创建固定集合
db.createCollection(logs,{capped:true,size:4096,max:10})#查看文档的占用空间
db.logs.stats()
适用场景 系统日志这非常符合固定集合的特征而日志系统通常也只需要一个固定的空间来存放日志。在MongoDB内部副本集的同步日志oplog就使用了固定集合。 存储少量文档如最新发布的TopN条文章信息。得益于内部缓存的作用对于这种少量文档的查询是非常高效的。