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});
相关推荐
Pniubi1 小时前
MySQL靠什么实现事务的?事务隔离级别有哪些?
java·数据库·mysql
数据库小学妹2 小时前
pgbouncer 事务池:prepared statement、临时表与会话状态
数据库·后端·postgresql
Lucifer三思而后行3 小时前
最近折腾了一下金仓数据库的备份恢复
数据库·备份恢复
草莓熊Lotso4 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
进击的荆棘5 小时前
MySQL——库的操作
数据库·mysql
2601_967980115 小时前
“小程序·云开发”上线 助力开发者的高效利器
数据库·存储管理·小程序云开发·云函数·开发者工具
zhangjw346 小时前
1-9 SELECT 查询基础:where、group by、having、order by、limit offset
数据库·postgresql·pg数据库
唐老板6 小时前
Postgres 慢查询,先取证再动手
数据库·ai编程
笃行35013 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具
数据库
非优秀程序员15 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》
数据库·node.js·代码规范