MongoDB详解(1)

MongoDB详解(1)

MongoDB

概念

  • MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。(支持分布式)

优点

  1. MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
  2. 如果负载的增加,它可以分布在计算机网络中的其他节点上这就是所
    谓的分片。
  3. MongoDB支持各种编程语言 :RUBY,PYTHON,JAVA,C++,
    PHP,C#等多种语言。
  4. 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的
    扩展性。

特点

  1. 无需要跨文档或跨表的事务及复杂的join查询支持(不支持事务和联查)
  2. 敏捷迭代的业务,需求变动频繁,数据模型无法确定
  3. 存储的数据格式灵活,不固定,或属于半结构化数据
  4. 业务并发访问量大(分布式)
  5. TB级以上的海量数据存储,且数据量不断增加(大数据量)
  6. 要求存储的数据持久化、不丢失
  7. 需要99.999%的数据高可用性
  8. 需要大量的地理位置查询、文本查询

MongoDB解决Mysql 的"三高"问题(mysql的缺点或劣势)

  • 对数据库高并发写入需求
  • 对海量数据高效率存储访问需求
  • 对数据库高扩展和高可用的需求

MongoDB 实际应用

  • 社交场景,比如朋友圈,附近的人的地点的存储
  • 游戏场景,比如用户当前装备,得分等
  • 物流场景,比如快递的位置,状态,途径
  • 视频场景,比如直播中的点赞数和互动留言等

MongoDB的操作

库操作
查看所有库
复制代码
show dbs;
创建库
复制代码
use myschool;
查看当前库
复制代码
db;
删除库
复制代码
db.dropDatabase();
集合操作
查看集合
复制代码
show collections;
创建集合
复制代码
db.createCollection("student");
删除集合
复制代码
db.student.drop();
数据操作
插入数据
复制代码
db.student.insert({ name: "张三", age: 18, money: 12000.00 });
db.student.insert({ name: "李四", age: 20, money: 12000.00 });
db.student.insert({ name: "王五", age: 25, money: 12000.00 });
db.student.insert({ name: "老刘", age: 3, money: 12000.00 });
db.student.insert({ name: "七七", age: 52, money: 12000.00 });
db.student.insert({ name: "钱二", age: 33, money: 12000.00 });
修改
复制代码
db.student.update(
    { name: "张三" },
    { $set: { age: 20 } }
)
查询不到要修改的数据时,添加{upsert:true}
复制代码
db.student.update(
    { uname: "张三" },
    { $set: { age: 20 } },
    { upsert: true }
)
一次修改多个 {multi:true}
复制代码
db.student.update(
    { name: "张三" },
    { $set: { name: "张三丰" } },
    { multi: true }
)
在原来的基础上加-20 $inc: { age: NumberInt(-20) }
复制代码
db.student.update(
    { uname: "张三" },
    { $inc: { age: NumberInt(-20) } }
)
删除

{}占位符 代表全部

复制代码
db.student.remove({})
删除所有符合条件的数据
复制代码
db.student.remove({ name: "张三丰" })
只删除查到的第一条数据
复制代码
db.student.remove(
    { name: "张三丰" },
    { justOne: true }
)
查询
复制代码
db.student.find()

db.student.find({ name: "张三" })

db.student.find({ age: { $lt: 20 } });
db.student.find({ age: { $lte: 20 } });
db.student.find({ age: { $gt: 20 } });
db.student.find({ age: { $gte: 20 } });

db.student.find({ age: { $ne: 20 } });
多个条件查询时
复制代码
db.student.find(
    {
        name: { $ne: "张三" },
        age: { $lt: 20 }
    }
);

db.student.find(
    {
        $or: [
            { name: { $ne: "张三" } },
            { age: { $lte: 20 } }
        ]
    }
);
范围查询
复制代码
db.student.find({age: { $gte: 20 , $lte: 50} });
模糊查询 -- 正则表达式
复制代码
db.student.find({name:/张/});
db.student.find({name:/^张/});
db.student.find({name:/张$/});
分页
复制代码
db.student.find().limit(3).skip((2-1)*3)
统计
复制代码
db.student.count({age})
排序
复制代码
db.student.find().sort({age:1})
索引
查看索引
复制代码
db.student.getIndexes()
创建索引 1升序 ,-1降序
复制代码
db.student.createIndex({name:1});
db.student.createIndex({name:-1});
删除索引
复制代码
db.student.dropIndex({name:-1});
相关推荐
凤山老林6 分钟前
授权模型只会RBAC?深入 ABAC 授权模型,实现权限判断做成策略引擎
大数据·数据库·算法
geovindu9 分钟前
sql:SQL Views and Materialized Views using mysql 9.0
大数据·数据库·数据仓库·sql·mysql·数据库开发·数据库架构
梦影_23 分钟前
MySQL进阶教程(二)—— 储存过程与触发器(下)
开发语言·数据库·后端·sql·mysql·oracle·数据库开发
工业涂料百问27 分钟前
陶瓷涂料的光泽度怎么检测?20°、60°、85° 三个角度怎么选
数据库
科创致远36 分钟前
ESOP 电子作业指导书车间无纸化实战评测
大数据·数据库·人工智能·制造
xiaomuzuirenzhen41 分钟前
2027车企数字化岗位项目准备:从SQL数据建模到库存分析看板
大数据·数据库·sql
鸽芷咕1 小时前
从环境搭建到敬礼动作:启元 Q1 SDK 全流程实战与 8 个实测坑排查手册
数据库·ai·机器人·sdk·启元q1
科技研学社1 小时前
服装厂激光开袋机与智能模板机怎么选?核心工序设备深度对比与落地实战
数据库·python
其实防守也摸鱼2 小时前
Cylab在线靶场——挑战图书馆初学者指南
服务器·前端·数据库·chrome·安全·网络安全·靶场
运维行者_5 小时前
应用性能监控怎么选?从调用链到用户体验的五个能力维度
运维·服务器·数据库·人工智能·mysql·性能优化·应用性能监控