一、初识MongoDB数据库
***启动MongoDB
启动:mongod --dbpath D:\MongoDB\data
连接:mongo
1.MongoDB和数据库的区别
SQL MongoDB 解释说明
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
primary key primary key 主键
2.MongoDB内置的三个数据库
admin:从权限的角度来看,这就是root数据库,要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。
local:这个数据库的数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config:当MongoDB用于分片设置时,config数据库在内部使用
二、MongoDB基本操作
1.操作MongoDB数据库
1.创建数据库
语法:use 数据库名
注意:如果数据库不存在,则创建数据库,当数据库里没有东西的时候,则在show dbs的时候,是不会显示这个数据库的
插入数据:进入数据库,执行(db.student.insert({name:'jxk',age:18,sex:'男',isdelete:0}))
其中student代表文档名,相当于mysql里的表名
2.删除数据库
前提:使用当前数据库
db.dropDatabase()
3.查看所有数据库
show dbs
4.查看正在使用的数据库
1.db
2.db.getName()
5.断开连接
exit
2.集合操作
1.查看当前数据库下的有哪些集合
show collections
2.创建集合
方法1.
语法:db.createCollection("集合名")
示例:db.createCollection("class")
方法2.
语法:db.集合名.insert(文档)
示例:db.class.insert({name:'姜新科',age:20})
3.删除当前数据库里的集合
语法:db.集合名.drop()
3.文档操作
(1)插入文档
方法1:使用insert()方法插入文档
语法1:db.集合名.insert(文档)
插入一个:db.student.insert({name:'zjx',age:20,sex:'男',isdelete:0})
语法2:db.集合名.insert([文档1,文档2,....])
插入多个:db.student.insert([{name:'韩梅梅',age:20,sex:'女',isdelete:0},{name:'李阳',age:28,sex:'男',isdelete:0}])
方法2:使用save()方法插入文档
语法:db.集合名.save(文档)
说明:如果不指定_id字段,save就和insert方法一样,如果指定_id字段,就和更新_id字段的数据
示例:db.student.save({_id:ObjectId("5b987e45ea0980a1079ee1a6"),name:'李阳',age:28,sex:'男',isdelete:0})
(2)文档更新
1.update() 用于更新已存在的文档
语法:
db.集合名.update(
query,
update,
{
upset:<boolean>,
multi:<boolean>,
writeConcern:<文档>,
}
)
参数说明:
query:update的查询条件,类似与mysql里update语句内wehere后面的内容
update:update的对象和一些更新的操作符($set,$inc)等,$set直接更新,$inc在原有的基础上累加后更新
upset:可写可不写,如果不存在update的记录,问你是否当新数据插入,true为插入,flase为不插入
multi:可写可不写,默认是false,只更新找到的第一条记录,如果值为true,则全部更新
writeConcern:可写可不写,抛出异常的级别
需求:将jxk的年龄更改为25
代码:db.student.update({name:"jxk"},{$set:{age:25}})
db.student.update({name:"jxk"},{$inc:{age:20}}) 会在age原有数据基础上加上20
db.student.update({name:"zjx"},{$set:{age:20}},{multi:true}) 更改所有
2.save() 通过传入的文档替换已有的文档
语法:db.集合名.save(
document,
{
writeCoencern:<docment>
}
)
示例:db.student.save({_id:ObjectId("5b987e45ea0980a1079ee1a6"),name:'李阳',age:28,sex:'男',isdelete:0})
(3)文档删除
说明:在执行remove()函数之前,先执行find()命令来判断执行的条件是否存在是一个良好的习惯
语法:
db.集合名.remove(
query,
{
justOne:<boolean>
writeConcern:<docment>
}
)
参数说明:
query 可写可不写,删除文档的条件,不写则删除全部
justONe:可写可不写,true只删除一个文档,默认是false
需求1:删除name为aaa的
代码:db.student.remove({name:"aaa"})
需求2:删除name为zjx的,并且删除第一个
代码:db.student.remove({name:"zjx"},{justOne:true})
(4)文档查询
1.find()方法1
db.集合名.find() 查询集合中的所有文档
2.find()方法2
语法:db.集合名.find(
query,
{
<key>:1,
<key>:1
}
)
参数说明:
query:查询条件
key:要显示的字段,1表示显示
示例:db.student.find({isdelete:0},{name:1,age:1})
3.pretty() 以格式化的方法显示文档
示例:db.student.find().pretty()
4.findOne() 查询匹配结果的第一条数据
示例:db.student.findOne({isdelete:0})
(5)查询条件操作符
作用:条件操作符用于比较两个表达式并从MongoDB集合中获取数据
a.大于 - $gt
语法:db.集合名.find({<key>:{$gt:<value>}})
示例:db.student.find({age:{$gt:20})
b.大于等于 - $gte
示例:db.student.find({age:{$gte:20}})
c.小于 - $lt
示例:db.student.find({age:{$lt:30}})
d.小于等于 - $lte
示例:db.student.find({age:{$lte:30}})
e.大于和小于
示例:db.student.find({age:{$gt:20,$lt:40}})
e.等于
示例:db.student.find({age:40})
f.不等于 - $ne
示例:db.student.find({age:{$ne:30}})
f.使用_id进行查询
示例:db.student.find({"_id":ObjectId("id值")})
g.查询某个结果集的数据条数count()
示例:db.student.find().count()
h.查询某个字段的值当中是否包含另一个值
示例:db.student.find({name:/k/})
i.查询某个字段的值是否以另一个值开头
示例:db.student.find({name:/^z/})
(6)条件查询and 和 or
a.AND条件
语法:db.集合名.find({条件1,条件2....})
示例:db.student.find({isdelete:0,age:{$lt:40}})
b.OR条件
语法:db.集合名.find(
{
$or:[{条件1},{条件2}...]
}
)
示例:db.student.find({$or:[{age:20},{age:30}]})
c.AND和OR联合使用
语法:
db.集合名.find(
{
条件1,
条件2,
$or:[{条件1},{条件2}]
}
)
需求:要求年龄等于20并且isdelete=1,或者年龄为30的
代码:db.student.find({$or:[{age:20,isdelete:1},{age:30}]})
(7)limit、skip
a.limit():指定读取的数量
db.student.find().limit(2) -只读取两条
b.skip():跳过指定的条数,读取后面的数据
db.student.find().skip(2)
c.limit和skip结合使用 -- 实现分页功能
db.student.find().limit(2)
db.student.find().skip(2).limit(2)
db.student.find().skip(4).limit(2)
(8)排序
语法:db.集合名.find().sort({<key>:1|-1}) -- 1升序,-1降序
示例:db.student.find().sort({age:1})