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});
相关推荐
普通网友5 分钟前
Python FastAPI 异步数据库管理
数据库·fastapi
晓子文集22 分钟前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
三言老师1 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
旺仔学长 哈哈1 小时前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场
ClickHouseDB2 小时前
ClickHouse托管Postgres:OLTP+OLAP,新能力解锁最佳数据平台
java·前端·数据库
数智化管理手记2 小时前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
吴声子夜歌2 小时前
MongoDB 4.2——选择片键
数据库·mongodb
天天进步一点点3 小时前
QSqlQuery删除sqlite数据库执行drop数据表报错database table is locked unable to fetch row问题
数据库·oracle·sqlite
音视频工程实战3 小时前
PromptQL 新手入门与实战指南
数据库·sql·算法
清川渡水3 小时前
NL2SQL 的正确打开方式:从「AI 猜 SQL」到「置信度闭环」的工程化落地
数据库·人工智能·sql