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});
相关推荐
水无痕simon12 分钟前
3 水平分表
java·数据库
恣艺20 分钟前
探索数据库世界:从基础类型到实际应用
数据库
小钻风33661 小时前
IDEA连接redis数据库时出现Failed to connect to any host resolved for DNS name.
数据库
ulias2121 小时前
单元最短路问题
数据库·c++·算法·动态规划
安卓开发者1 小时前
鸿蒙NEXT中SQLite数据库全面实战指南
数据库·sqlite·harmonyos
xuejianxinokok1 小时前
PostgreSQL 18 新功能:虚拟生成列
数据库·后端
DemonAvenger2 小时前
MySQL索引失效全解析:从分析到优化,10年经验实战分享
数据库·mysql·性能优化
咖啡Beans2 小时前
踩坑无数!MySQL UNION和ORDER BY混用的血泪教训,看完不再翻车
数据库·mysql
椰椰椰耶2 小时前
[Spring Cloud][3]从零开始简单工程搭建实践详解,远程调用
java·数据库·spring cloud
时序数据说3 小时前
物联网时序数据库IoTDB是什么?
大数据·数据库·物联网·时序数据库·iotdb