mongodb
安装 mongodb
点击安装
注意 mongodb compass 千万不要勾选
如何启动mongodb
1,假设你安装在 D:mongo
1,直接进入这个目录,进入 bin目录 在这个目录下 打开命令行,运行mongod
2,想任意位置 启动mongodb
需要添加环境变量
计算机->属性->高级系统设置->环境变量->系统变量->path
环境变量语法 ;分割的多个环境变量
末尾加一个 ; D:mongo\bin\添加进入 就可以了
此时 win+r cmd 打开 默认 c盘 报错
此时 数据库 自动放在 c盘 下 data目录中的 db目录
但是我们没有这个目录,需要手动创建来解决
mongodb
非关系型数据 存储数据格式 就是json mongodb redis
关系型数据:mysql oracle
对比
关系型 非关系型 json
数据库(database) (数据仓库) 数据库(database)
表 (table) collection 集合 [{},{},{}]
行 row document 文档 json
列 字段 col key
mongodb 原生sql 语句
show dbs 查看有哪些数据库
use 数据库 切换到这个数据库
show collections 查看当前数据库下 有哪些 集合 (前提 你得先切换到目标数据库)
一下 所有的操作 都需要切换到 目标数据库才能执行
db.createCollection("名字") 创建一个集合
db.集合名.drop()
以上命令 都不重要(这些操作 我们一般会在可视化软件中操作)
下面 增删改查 才是重点
robot 3T mongodb可视化
使用 InteliShell 进行增删改查操作
查看文档
最简单查看文档的方法就是find()
,会检索集合中所有的文档结果
db.集合名.find()
要以格式化的方式显示结果,可以使用pretty()
方法。
db.集合名.find().pretty()
1.固值寻找
寻找age集合里面所有含有属性值为wscats的文档结果,相当于where name = 'wscats'
db.age.find({name:"wscats"})
2.范值寻找
操作 语法 示例 等效语句
相等 {:} db.age.find({"name":"wscats"}).pretty()
where name = ‘wscats’
小于 {:{$
lt:}} db.age.find({"likes":{$lt:50}}).pretty()
where likes < 50
注意:小于后面的值要用大括号阔起来
小于等于 {:{$
lte:}} db.age.find({"likes":{$lte:50}}).pretty()
where likes <= 50
大于 {:{$
gt:}} db.age.find({"likes":{$gt:50}}).pretty()
where likes > 50
大于等于 {:{$
gte:}} db.age.find({"likes":{$gte:50}}).pretty()
where likes >= 50
不等于 {:{$
ne:}} db.age.find({"likes":{$ne:50}}).pretty()
where likes != 50
3.AND和OR寻找
AND
在find()方法中,如果通过使用,
将它们分开传递多个键,则mongodb将其视为AND条件。 以下是AND的基本语法是一个数组
寻找_id
为1并且name
为wscats的所有结果集
db.age.find(
{
$and: [
{"_id": 1}, {"name": "wscats"}
]
}
)
OR
在要根据OR条件查询文档,需要使用$or
关键字。以下是OR条件的基本语法
寻找name
为corrine或者name
为wscats的所有结果集
db.age.find(
{
$or: [
{"name": "corrine"}, {“name“: "wscats"}
]
}
)
AND和OR等结合
相当于语句where title = "wscats" OR ( title = "corrine" AND _id < 5)
db.age.find({
$or: [{
"title": "wscats"
}, {
$and: [{
"title": "corrine"
}, {
"_id": {
$lte: 5
}
}]
}]
})
插入文档
文档的数据结构和JSON基本一样。
所有存储在集合中的数据都是BSON格式。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
要将数据插入到mongodb集合中,需要使用mongodb的insert()
或save()
方法。
db.集合名.insert(document)
比如我们可以插入以下数据
db.wscats.insert({
title: 'MongoDB Tutorials',
description: 'node_tutorials',
by: 'Oaoafly',
url: 'https://github.com/Wscats/node-tutorial',
tags: ['wscat','MongoDB', 'database', 'NoSQL','node'],
num: 100,
})
也可以支持插入多个,注意传入的是数组形式
db.wscats.insert([{
_id: 100,
title: ‘Hello’
},{
_id: 101,
title: ‘World’
}])
在插入的文档中,如果不指定_id参数,那么mongodb会为此文档分配一个唯一的ObjectId
要插入文档,也可以使用db.post.save(document)
。如果不在文档中指定_id,那么save()
方法将与insert()
方法一样自动分配ID的值。如果指定_id,则将以save()方法的形式替换包含**_id**的文档的全部数据。
db.wscats.save({
_id: 111,
title: 'Oaoafly Wscats',
})
更新文档
1.update()方法
寻找第一条title为wscats的值,并且更新值title为corrine和age为12
db.age.update({
'title': 'wscats'
}, {
$set: {
'title': 'corrine',
'age': 12
}
})
默认情况下,mongodb只会更新一个文档。要更新多个文档,需要将参数multi
设置为true,还可以配合find方法里面的各种复杂条件判断来筛选结果,然后更新多个文档
寻找所有title为wscats的值,并且更新值title为corrine和age为12
db.age.update({
'title': 'wscats'
}, {
$set: {
'title': 'corrine',
'age': 12
}
}, {
multi: true
})
2.save()方法
将_id
主键为3的文档,覆盖新的值,注意_id
为必传
db.age.save({
'_id':3,
'title': 'wscats'
})
删除文档
删除主键_id
为3的文档,默认是删除多条
db.age.remove({
'_id':3
})
建议在执行remove()
函数前先执行find()
命令来判断执行的条件是否正确
如果你只想删除第一条找到的记录可以设置justOne为1,如下所示
db.age.remove({...},1)
全部删除
db.age.remove({})
Limit与Skip方法 (结合find方法使用)
Limit
如果你需要在mongodb中读取指定数量的数据记录,可以使用mongodb的Limit方法,limit()
方法接受一个数字参数,该参数指定从mongodb中读取的记录条数。
db.age.find().limit(数量)
Skip
我们除了可以使用limit()
方法来读取指定数量的数据外,还可以使用skip()
方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
db.age.find().limit(数量).skip(数量)
//skip()方法默认值为0
current 哪一页 当前页
pageSize 一页多少条
10条
0 10 1
10 10 2
20 10 3
db.stu.find().skip((current-1)*pageSize).limit(pageSize)
所以我们在实现分页的时候就可以用limit来限制每页多少条数据(一般固定一个值),用skip来决定显示第几页(一个有规律变动的值)
排序
在mongodb中使用使用sort()
方法对数据进行排序,sort()
方法可以通过参数指定排序的字段,并使用1和-1来指定排序的方式,其中1为升序排列,而-1是用于降序排列。
1 升序排列
-1 降序排列
db.集合名.find().sort({键值(属性值):1})
把age
集合表重新根据_id
主键进行降序排列
db.age.find().sort({
"_id": -1
})