mongodb数据库
mongodb与mysql区别:
mysql(关系型数据库):
优点:
支持事务:对于需要保证数据一致性和完整性的操作,事务处理能力非常重要
数据一致性:严格遵守关系数据的特征ACID(原子性,一致性,隔离性,持久性)
复杂查询优化:对于复杂的关联查询和数据分析,具有较好的优化器和性能
场景:如果数据有明确的结构,并且关系紧密,适合用mysql,例如:金融,电商等对数据要求较高
mongodb(Nosql):
优点:
灵活性:文档型数据库,结构灵活,无需事先定义严格的模式,便于快速开发和迭代
扩展性:水平扩展相对容易,可以通过分片来实现大规模数据存储
高并发写入:对于写入操作频繁的场,性能较好。
快速开发:适合敏捷开发,能够快速适应不断变化的数据结构需求
场景:半结构化或非结构化:如日志数据,用户配置文件等,快速迭代项目:数据结构不稳定的情况下,mongodb更易于使用,例如:社交网络,实时数据分析等
查询对比:
采用docker安装
docker run -d --name mongodb \
-p 27017:27017 \
-v /your/local/mongodb:/data/db \
-v /your/local/mongodb/mongod.conf:/etc/mongod.conf
mongo
#配置账号密码
mongo admin #进去管理员账号
#创建用户
db.createUser({user:'root',pwd:'root',roles:[{role:"root", db:"admin"},'readWrite']});
#连接mongodb
db.auth('root', 'root')
#如果数据库不存在则自动创建
use test
#查看有权限看的所有的数据库命令
show dbs
# 创建集合
db.collection(name) #显示创建
#查看
show collections
#删除
db.name.drop()
#单个文档插入
db.集合名称.insert({"name":"xujie"})
#查询
db.集合名称.find()
#插入多个
db.集合名称.insertMany([{"name":"xujie"}])
#条件查询
db.集合名称.find({"字段":"值"})
#查询数据第一条数据
db.集合名称.findOne({"字段":"值"})
# 投影查询,只想显示部分字段
db.集合名称.find({"字段":"值"},{字段名:1,字段名:1}默认会显示id,可以采用{_id:0}
# 批量插入失败怎么办
try{
db.集合名称.insertMany([{"name":"xujie"}]);
}catch(e){
print(e)
}
#文档更新
db.colletion.update({“查询字段”:"值"},{"更新字段":"值"}) # 覆盖修改
db.colletion.update({“查询字段”:"值"},{$set:{"更新字段":"值"}}) #局部修改
db.colletion.update({“查询字段”:"值"},{$set:{"更新字段":"值"}},{multi:true}) #批量修改
db.colletion.update({“查询字段”:"值"},{$inc:{"列":NumberInt(1)}}) #给某一个列加1
#删除
db.colletion.remove({“字段”:"值"})
#分页查询
db.colletion.count({“字段”:"值"}) #统计总条数
db.colletion.find().limit(2) # 只展示两条
db.colletion.find().limit(2).skip(2) #跳过前两条,每页展示2条
#排序查询
db.colletion.find().sort({排序字典:1}) #1代表升序,-1代表降序
#正则查询
db.colletion.find({字段:/正则表达式/})
# 比较查询
db.集合名称.find({"字段":{$gt :value}})
# 包含查询
db.集合名称.find({"字段":{$in:[“值”,“值”]}}) #包含
db.集合名称.find({"字段":{$nin:[“值”,“值”]}}) #不包含
# 多条件查询
db.集合名称.find($and:["字段":{$gt :value},{"字段":"值"}])
db.集合名称.find($or:["字段":{$gt :value},{"字段":"值"}])