目录
在之前的博客中我们了解了SQL和基于SQL的数据库MySQL,我们知道SQL是用于操作关系型数据库。与之相反的还有NoSQL,即非关系型数据库,不能使用SQL。MongoDB数据库是一个基于分布式文件存储的数据库,它是介于关系数据库与非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。
概述
首先我们要先了解什么是NoSQL,NoSQL = NOT ONLY SQL,意思是“不仅仅是SQL”。其用于超大规模数据的存储,这些类型的数据存储不需要固定的模式,不需要多余的操作就可以横向扩展。 NoSQL数据库能够很好的处理第三方平台用户数据这些超大规模数据的存储,并且具有高扩展性、低成本、灵活架构、关系简单等优点,因此得到了广泛的应用。
MongoDB是一个基于分布式文件存储的开源数据库系统,其旨在为web应用提供可扩展的高性能数据存储解决方案。它将数据存储为一个文档,其文档类似于JSON对象。
MongoDB数据库
MongoDB是一个数据库管理系统,内里包含多个数据库,每个数据库都有自己的权限和集合,不同的数据库放在不同的文件之中。MongoDB默认数据库为“db”,其存在于data目录中。
MongoDB数据库的命名规则
1.不能为空字符串("")
2.不能包含' '(空格) . / $ \ \0
3.全部小写
4.最多64字节
保留数据库名
有一些数据库名是保留的,可以直接进行访问
1.admin库:超级管理员(相当于MySQL中的root)
2.local库:不会被复制,可以用来存储限于本地单台服务器的任意集合
3.config库:配置信息,保存的是MongoDB的配置信息
基本操作
以下操作在Robo 3T上进行
查看所有数据库
show dbs
创建数据库
● 指令创建:use 数据库名
use dbname
指令创建有一个缺点,创建完毕后没有插入数据看不到创建好的数据库
[可以使用db命令查看当前数据库名]
● 手动创建:右键点击MongoDB,点击Create Database
删除数据库
● 指令删除:db.dropDatabase()
db.dropDatabase()
● 手动删除:右键点击需要删除的数据库,再点击Drop Database
创建集合
● 指令创建:db.createCollection("name",options)
name:要创建的集合·名称
options:可选参数,制定有关内存大小及索引的选项
capped(布尔):true创建固定集合,固定集合指有着固定大小的集合,当 其达到最大值后会自动覆盖最早的文档(该值为true必须指定size参数)
autoIndexId(布尔): 默认false,true自动在 _id 字段创建索引
size(数值):为固定集合指定一个最大值
max(数值):指定固定集合中包含文档的最大数量
db.createCollection("coll")
● 手动创建:右击数据库下的Collections文件夹,再点击Create Collection
删除集合
● 指令删除:db.集合名.drop()
db.coll.drop()
● 手动删除:右击需要删除的集合,再选择Drop Collection
插入文档
● 指令插入:
1.db.集合名.insert(document)
若插入的数据主键已经存在,则抛出异常提示主键重复,不保存当前数据
2.db.集合名.save(document)
db.stu.insert( { _id:1, name:'张三', gender:'男' } )
若_id主键存在则更新数据,反之插入数据
● 手动插入:右键单击集合选择Insert Document,输入数据点击保存
更新文档
● 指令更新:
1.update()方法:
db.集合名.update( <query>, --query:update的查询条件 <update>, --update的对象和一些更新的操作符 { upsert: <boolean>, --upsert(可选)true插入不存在update的记录,false不插入 multi: <boolean>, --multi(可选)true更新按条件查出的多条记录·,false只更新找到的第一条记录 writeConcern: <document> --writeConcern(可选),抛出异常的级别 } )//更新姓名 db.stu.update( {'name':'张三'}, {$set:{'name':'小明'}} )
上例中只修改第一条发现的语句,需要修改多条相同的文档则需要设置multi参数为true
2.save()方法:
db.集合名.save( <document>, --document:文档数据 { writeConcern: <document> --writeConcern(可选),抛出异常的级别 } )该方法通过传入的文档来替换已有文档,主键存在则更新,反之则插入
● 手动更新:右键单击Update Documents
查询文档
● 指令查询:db.集合名.find(query,projection)
query:可选,使用查询操作符指定查询条件
projection:可选,使用投影操作符指定返回的键
db.stu.find()
若需要以易读的方式来读取数据,可以使用pretty()方法:
db.集合名.find(query,projection).pretty()
● 手动查询:右键单击View Documents
指令查询效果:
MongoDB条件操作符
● 等于:{<key>:<value>}
db.stu.find({_id:2}).pretty()
● 小于:{<key>:{$lt:<value>}}
db.stu.find({_id:{$lt:2}}).pretty()
● 小于或等于:{<key>:{$lte:<value>}}
db.stu.find({_id:{$lte:2}}).pretty()
● 大于:{<key>:{$gt:<value>}}
db.stu.find({_id:{$gt:2}}).pretty()
● 大于或等于:{<key>:{$gte:<value>}}
db.stu.find({_id:{$gte:2}}).pretty()
● 不等于:{<key>:{$ne:<value>}}
db.stu.find({_id:{$ne:2}}).pretty()
MongoDB与条件
MongoDB查询方法可以传入多个键(key),每个键之间用逗号隔开
语法:
1.db.集合名.find({key1:value1,key2:value2}).pretty()
2.db.集合名.find({'$and':[{key1:value1,key2:value2}]}).pretty()
db.stu.find({_id:1,gender:'男'}).pretty() db.stu.find({'$and':[{_id:1,gender:'男'}]}).pretty()
MongoDB或条件
MongoDB或条件语句使用关键字$or
语法:db.集合名.find({'$or':[{key1:value1,key2:value2}]}).pretty()
db.stu.find({'$or':[{_id:1,gender:'男'}]}).pretty()
模糊查询
● 查询字段包含某字的文档
db.集合名·.find({字段:/字/}).pretty()
db.stu.find({name:/1/}).pretty()
● 查询字段以某字开头的文档
db.集合名·.find({字段:/^字/}).pretty()
db.stu.find({name:/^1/}).pretty()
● 查询字段以某字结尾的文档
db.集合名·.find({字段:/字$/}).pretty()
db.stu.find({name:/^1/}).pretty()
删除文档
语法:
db.collection.remove( <query>, --query:可选,删除文档的条件 <justOne> --justOne:可选,设为true或1,只删除一个文档,不设置或者设置为false,删除所有匹配条件的文档 )// 删除主键为1的文档 db.stu.remove({_id:1}).pretty() //删除所有数据 db.stu.remove({}).pretty()