Mongodb的介绍及入门操作
Monggedb的介绍
首先我们需要知道MongoDB是一个什么东西,他是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
关系型数据库和非关系型数据库区别
不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。
sql术语/概念 | mongodb术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,mongodb不支持 | |
primary key | primary key | 主键,mongdb自动将_id字段设置为主键 |
下表说明各自的优缺点以及特性
数据库类型 | 特性 | 优点 | 缺点 |
---|---|---|---|
关系型数据库 | 1、关系型数据库,是指采用了关系模型来组织数据的数据库;2、关系型数据库的最大特点就是事务的一致性;3、简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。 | 1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;4、支持SQL,可用于复杂的查询。 | 1、为了维护一致性所付出的巨大代价就是其读写性能比较差;2、固定的表结构;3、高并发读写需求;4、海量数据的高效率读写; |
非关系型数据库 | 1、使用键值对存储数据;2、分布式;3、一般不支持ACID特性;4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合 | 1、无需经过sql层的解析,读写性能很高;2、基于键值对,数据没有耦合性,容易扩展;3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,而关系型数据库则只支持基础类型。 | 1、不提供sql支持,学习和使用成本较高;2、无事务处理,附加功能和报表等支持也不好; |
命令行操作 Mongodb
D盘mongodb文件夹内解压下载好的mongodb文件(可以根据自己的爱好选择盘符)
D盘根目录下创建一个文件夹data,在data内部再创建一个文件夹db
进入到mongodb的bin目录
按住shift,点击鼠标的右键,打开命令行窗口,输入如下指令打开数据库连接池
mongod --dbpath d:\data\db
再在此目录中,按住shift,点击鼠标的右键,打开命令行窗口,输入如下指令打开一个连接数据库的客户端,不要关闭上一个窗口
mongo
如果这样还不成功,说明是管理员权限的问题,那就需要多走几步路
以管理员身份运行命令行窗口打开数据库连接池
d:
cd mongodb (注意你自己的文件夹的名称)
cd mongodb-win32-x86_64-2008plus-ssl-4.0.9
cd bin
mongod --dbpath d:\data\db
以管理员身份运行命令行窗口打开客户端
d:
cd mongodb (注意你自己的文件夹的名称)
cd mongodb-win32-x86_64-2008plus-ssl-4.0.9
cd bin
mongo
数据库常用命令
help查看命令提示
help
db.help()
db.test.help()
db.test.find().help()
创建切换数据库
无则创建并且切换,有则切换
db // test
use database // switched to db database
db // database
查询数据库
明明已经创建了数据库database,但是查询不出来,是因为现在你的数据库是空的,admin和local数据库是系统默认的数据库
show dbs
/**
admin
local
*/
显示当前DB状态
这里我们举例创建了一个数据库class
db.stats()
/**
{
"db" : "class",
"collections" : 0,
"views" : 0,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 0,
"numExtents" : 0,
"indexes" : 0,
"indexSize" : 0,
"fileSize" : 0,
"ok" : 1
}*/
查看当前DB版本
根据每个人下载的版本可能会有所不同
db.version()
/*
4.0.9
*/
查看当前DB的链接机器地址
db.getMongo() // connection to 127.0.0.1:27017
删除数据库
虽然数据库删除成功,但是通过db还是可以访问到
> db
class
> db.dropDatabase()
{ "ok" : 1 }
> db
class
查询当前所使用的数据库
> db.getName()
> class
collection 聚集集合操作
集合或者说数据库的操作无非就是围绕着数据的增删改查来进行,下面就是对mongodb的增删改查的操作做一个简单的了解,输入相应的命令就会有相应的操作。
增: 增的操作的就是insert,可以插入单条或者多条,以键值对的形式
db.collection.insertOne({}) //插入单条数据,以对象的形式
db.collection.insertMany([]) //插入多条数据,以数组的形式
db.collection.insert([]) //可以插入单条,或者多条
删: delete,输入你需要删除的数据的条件,如果多条数据有相同的条件,则会删除多条,必要时可以选择唯一的条件
db.users.deleteOne({password:"123"}) //删除一条数据,选择某个条件
db.users.deleteMany({}) // 删除所有数据,空对象则是删除所有
查: find进行查询,不输入条件则查询所有
db.users.find() //显示users下所有文档
db.users.find().pretty() //以格式化的形式显示所有文档
改: update,修改有两个参数,第一个参数是条件,第二个参数是修改的值,以$set:{key:value}的方式
db.users.updateOne({key:value},{$set:{key:value}}) //修改单条数据
db.users.updateMany({key:value},{$set:{key:value}}) //修改多条
db.users.updateOne({key:value},{$inc:{key:num}}) //修改,$inc表示自增或自减,只能针对number类型
查询 以下介绍的查询可以设置相应条件
db.users.find({},{}).pretty() //等同于db.users.find().pretty()
db.users.find({},{_id:0}).pretty() //不显示id字段,只能设置一个
db.users.find({},{_id:0,username:1}).pretty() //不显示id字段,只显示username字段
db.users.find({$or:[{password:"123"},{password:"456"}]},{_id:0}).pretty()
//$or表示“或”,可以设置多条,后面跟的数组,数组里面放的是对象
find参数问题
find的第一个参数是查询的数据的条件,可以指定
db.users.find({username:"XXX"},{_id:0}).pretty()
//只显示username为XXX的数据
find中第二个参数是对数据的字段的显示设置,设置为0则不显示,为1则显示
db.users.find({},{_id:0,username:1}).pretty() //不显示id字段,只显示username字段
区间查询
db.users.find({age:{$gte:18,$lte:20}},{_id:0}).pretty() //选择年龄在18-20之间的数据
大于 | 大于等于 | 小于 | 小于等于 |
---|---|---|---|
$gt | $gte | $lt | $lte |
升降序问题
.sort({key:num}) 按照key值排序,1为升序,-1为降序,只正对number类型
db.users.find({},{_id:0}).sort({age:1}).pretty() //根据年龄进行升序排序
**查询数据并且计数 **
.count()
db.users.find({},{_id: 0}).count() //对所有数据计数
db.users.find({age:{ $gte: 18, $lte: 20}},{_id:0}).count() //对年龄在18-20之间的数据计数
精确、模糊查询
db.users.find({username:"大"},{_id:0}).pretty() //对username以“大”开头的数据查询
“大” 精确查询
/大/ 模糊查询
/^大/ 以大开头查询
模糊查询可配合$or使用
以上就是对mongodb的操作的简单的介绍,如有不足欢迎补充。