MongoDB基础
1. 介绍
1.1 什么是MongoDB
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。是NoSQL。
1.2 什么是NoSQL
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
1.3 什么是Mongoose
一般我们不直接用MongoDB的函数来操作MongoDB数据库
Mongose就是一套操作MongoDB数据库的接口
2. 准备
MongoDB安装包括两部分,一个是将MongoDB的服务下载下来并且安装到自己电脑;一个是可视化界面
2.1 安装MongoDB
打开官网 https://www.mongodb.com/try/download/community
下载安装包后,即可打开安装,可以自己设置放置路径
注意:下图一定要取消安装,compass客户端可视化界面我会另外下载。你要是选中了,那就是安装了一天也完成不了
安装完后,在安装目录的 **data **下需要自己手动创建一个 **db **文件夹
2.2 测试是否安装成功
进入C:\Program Files\MongoDB\Server\5.0\bin(默认的安装路径),双击mongo.exe,
用记事本打开mongod.cfg,可以看到,访问端口号是:27017。可以修改,不过修改后需要重启mongo.exe。
在浏览器访问:http://127.0.0.1:27017 ,出现下面网页,代表成功启动。
当然这样启动会很麻烦,而且还不好关闭。怎么做呢?
原来的版本需要自己配置,通过dos命令框来实现启动和关闭MongoDB。现在不需要配置,直接以管理员模式运行dos命令框,通过命令启动和关闭。
2.3 安装可视化工具
官网下载 RoBo 3T(Robomongo is now Robo 3T)
下载地址:https://robomongo.org/download
下载后安装即可
打开,创建新连接
连接成功后,在左边的视窗上右键选项来创建数据库,和open shell
来进行指令操作。
3. MongoDB 基础操作
详细请看:https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html
3.1 插入文档
insert({数据})
和 insertMany([{},{}])
都可以对集合增加文档,相当于给表增添记录
3.2 更新文档
update(query, data)
后面还可以跟两个Boolean值
- upsert:如果不存在要更新的记录是否要插入,默认为 false
true为插入,false为不插入 - multi:如果有多条要更新的记录是否全部更新,默认为 false
true为全部,false为第一个
其中,$set
为修改器,不用则就会整个文档都替换掉,就是说原来Tom哪一项就没有name只有age了,加上,就只更新age
3.3 删除文档
remove(query)
后面还可以加一个Boolean参数:justOne,为 true则只删一条,默认为 false,就是全部删除
3.4 查询文档
find(query)
第二个参数是配置显示字段,_id是默认有的
3.4.1 AND 条件
db.col.find({key1:value1, key2:value2})
3.4.2 OR 条件
db.col.find({ $or: [ {key1: value1}, {key2:value2} ] })
3.4.3 条件操作符
$in, $nin, $and... 请看https://mp.weixin.qq.com/s?__biz=MzI1NDY0MTkzNQ==&mid=2247484284&idx=1&sn=b528df57af8b9c09ae86ac752913b7b9&scene=21#wechat_redirect
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | { |
db.col.find({"by":"Tom"}) | where by = 'Tom' |
小于 | { |
where likes < 50 | |
小于或等于 | { |
where likes <= 50 | |
大于 | { |
where likes > 50 | |
大于或等于 | { |
where likes >= 50 | |
不等于 | { |
where likes != 50 |
3.4.4 $type 操作符
详细请看:https://www.runoob.com/mongodb/mongodb-operators-type.html
db.test.find({ name: { $type: 'string' } })
3.4.5 limit()、skip()、sort()
limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
db.COLLECTION_NAME.find().limit(NUMBER)
我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
sort用来实现排序功能
1表示升序,-1表示降序
4. Mongoose 基础操作
详情请看:参考手册
npm install mongoose
import mongoose from 'mongoose'
// 连接数据库
mongoose.connect('mongodb://localhost:27017/users', { useUnifiedTopology: true, useNewUrlParser: true })
// Schema定义了集合中文档的结构
const usersSchema = new mongoose.Schema({
username: String,
password: String
})
// Model是从Schema编译来的构造函数。Model负责从MongoDB中创建和读取文档
// 调用mongoose.model()时,Mongoose就会编译一个Model
//
const Users = mongoose.model('users', usersSchema)
// 查询
Users.find({}, {username: 1, _id: 0}, (err, user) => {
if (err) {
console.log(err)
return
}
console.log(user)
})