一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

主要特点
  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持 RUBY,PYTHON,JAVA,C++,PHP 等多种语言。
  • 文件存储格式为 BSON(一种 JSON 的扩展)
  • 可通过网络访问
存储结构

MongoDB 中的记录就是一个 BSON 文档,它是由键值对组成的数据结构,类似于 JSON 对象,是 MongoDB 中的基本数据单元。字段的值可能包括其他文档、数组和文档数组。

  • 文档(Document) :MongoDB 中最基本的单元,由 BSON 键值对(key-value)组成,类似于关系型数据库中的行(Row)。

  • 集合(Collection) :一个集合可以包含多个文档,类似于关系型数据库中的表(Table)。

  • 数据库(Database) :一个数据库中可以包含多个集合,可以在 MongoDB 中创建多个数据库,类似于关系型数据库中的数据库(Database)。

SQL 与 MongoDB 对比
SQL MongoDB
表(Table 集合(Collection)
行(Row 文档(Document)
列(Col) 字段(Field)
主键(Primary Key 对象 ID(Objectid)
索引(Index) 索引(Index)
嵌套表(Embeded Table) 嵌入式文档(Embeded Document)
数组(Array) 数组(Array)
使用方法
1.创建数据库
复制代码
use DATABASE_NAME
2.查看所有数据库
复制代码
show dbs
3.查看当前数据库
复制代码
db
4.切换数据库
复制代码
use DATABASE_NAME
5.删除数据库
复制代码
db.dropDatabase()
6.创建数据表
复制代码
db.createCollection("TABLES_NAME")
7.查看数据表
复制代码
show tables
show collections
8.删除数据表
复制代码
db.TABLES_NAME.drop()
9.表中插入数据
复制代码
db.TABLES_NAME.insert(document)
db.TABLES_NAME.save(document)
例:
复制代码
db.runoob.insert({"name":"菜鸟教程"})
或:
复制代码
document=({"name":"菜鸟教程","age":18})
db.runoob.insert(document)
10.查看表数据
复制代码
db.TABLES_NAME.find(query)
查多少条:
复制代码
db.TABLES_NAME.find().limit(NUMBER)
跳过多少条:
复制代码
db.TABLES_NAME.find().limit(NUMBER).skip(NUMBER)
格式化:
复制代码
db.TABLES_NAME.find(query).pretty()
排序(其中 1 为升序排列,而 -1 是用于降序排列):
复制代码
db.TABLES_NAME.find().sort({KEY:1})
MongoDB 与 SQL Where 语句比较:
操作 格式 范例 SQL Where 语句
等于 {:} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {:{$lt:}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {:{$lte:}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {:{$gt:}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {:{$gte:}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {:{$ne:}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
例:
复制代码
db.col.find({"name":"菜鸟教程", "title":"MongoDB 教程"}).pretty()
db.col.find({$or:[{"name":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
db.col.find({"likes": {$gt:50}, $or: [{"name": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
11.修改表数据
复制代码
db.TABLES_NAME.update(query,update,{upsert,multi,writeConcern})
db.TABLES_NAME.save(document,{writeConcern})
参数说明:

query : update的查询条件,类似sql update查询内where后面的。

update : update的对象和一些更新的操作符(如 , , ,inc...)等,也可以理解为sql > update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true> 为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。

例:
复制代码
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
db.col.save({"_id" : ObjectId("56064f89ade2f21f36b03136"),"title" : "MongoDB"})
12.删除表数据
复制代码
db.collection.remove(query,{justOne,writeConcern})
参数说明:

query :(可选)删除的文档的条件。

justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

writeConcern :(可选)抛出异常的级别

例:
复制代码
db.col.remove({'title':'MongoDB 教程'})
db.col.remove({'title':'MongoDB 教程'},1)
13.清空表数据
复制代码
db.col.remove({})
相关推荐
eWidget4 小时前
从MongoDB到金仓数据库:一场零中断的国产化迁移实践
数据库·mongodb·kingbase·数据库平替用金仓·金仓数据库
Yolanda944 小时前
【IDEA】IDEA连接MongoDB数据库
数据库·mongodb·idea使用
一个天蝎座 白勺 程序猿1 天前
金仓数据库KingbaseES无缝替代MongoDB,实现核心业务系统平稳迁移
数据库·mongodb·架构·时序数据库·kingbasees
心态还需努力呀1 天前
不止于 MongoDB 替代:金仓数据库多模一体的技术实践与性能实测
数据库·mongodb
正在走向自律1 天前
KingbaseES数据库MongoDB兼容模式实战:协议级兼容实现业务平滑迁移
数据库·mongodb·国产数据库·kingbasees·电科金仓
倔强的石头1062 天前
多模融合重塑文档数据库:金仓数据库 MongoDB 兼容版的技术实践
数据库·mongodb·kingbase
Gary董3 天前
redis 和 mongoDB 的优劣
数据库·redis·mongodb
数据知道4 天前
一文掌握 MongoDB 详细安装与配置(Windows / Linux / macOS 全平台)
linux·数据库·windows·mongodb·macos
茁壮成长的露露5 天前
MongoDB分片案例
数据库·mongodb
chalmers_155 天前
MongoDB实现发布订阅机制
数据库·mongodb