一、起步
- MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
- MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
二、安装MongoDB
- 官网下载地址并安装
- 配置安装目录下的bin到环境变量中去
- 如需进行测试可以使用:
| 1 | mongod -v | 
三、打开mongodb数据库
- 在键入mongod命令前需要改对应盘符的根目录下创建data/db目录
- 然后键入命令
| 1 | D:\> mongod | 
- 保持shell的打开状态
四、连接mongodb数据库
- 保持mongodb数据库打开状态
- 在命令行中输入
| 1 | D:\> mongo | 
五、常用的命令
- 显示mongodb中所有数据库
| 1 | show dbs | 
- 显示当前数据库
| 1 | db | 
- 切换或创建新数据库
| 1 | use 数据库名 | 
- 显示当前数据库的所有集合名
| 1 | show collections | 
- 显示当前数据库指定集合的所有文档
| 1 | db.集合名.find() | 
六、Node.js中操作MongoDB
1、使用MongoDB官方的node-mongodb-native
2.使用Mongoose模块
2.1 安装Mongoose
| 1 | npm i mongoose | 
2.2 连接MongoDB
| 1 | const mongoose = require('mongoose') | 
2.3 设计数据库表(集合)
Schema就是一个模板,起到了预先设计数据表的作用。其中required属性为真代表了改字段不可为空
| 1 | const UserSchema = new mongoose.Schema({ | 
2.4 增加文档
mongoose.model中的第一个参数为表名,也就是集合名,第二个参数是设计好的表结构。
插入一条name为admin的文档
| 1 | const User = mongoose.model('User',UserSchema) // 相当于User表集合 | 
2.5 查找文档
查找文档的所有方法都是在表集合对象上的,例如上例中的User
| 方法 | 参数 | 功能 | 
|---|---|---|
| find | [{属性:值[,…]}],(err,data)=>{} | 查找满足指定属性=值的文档数组到回调中data,第一个参数省略为无条件查找 | 
| findOne | [{属性:值[,…]}],(err,data)=>{} | 查找满足指定属性=值的第一条文档到回调中data,第一个参数省略为无条件查找 | 
例如
| 1 | cat.find({ | 
结果为:
| 1 | [ { _id: 5d2be43e1fb7af12f0f745a8, name: 'milse88', __v: 0 } ] #数组 | 
2.6 删除文档
| 方法 | 参数 | 功能 | 
|---|---|---|
| deleteOne | [{属性:值[,…]}],(err,res)=>{} | 查找满足指定属性=值的第一个文档进行删除,第一个参数省略为无条件删除 | 
| deleteMany | [{属性:值[,…]}],(err,res)=>{} | 查找满足指定属性=值的所有文档进行删除,第一个参数省略为无条件查找 | 
| remove | [{属性:值[,…]}],(err,res)=>{} | 查找满足指定属性=值的所有文档进行删除,第一个参数省略为无条件查找 (官方文档中说明改方法以不建议使用),因此不再举例 | 
- 注意,Moogoose使用正则匹配,所以条件对象中的值可以为正则表达式的形式出现
- Model.AIP的回调都是以
(error,result)=>{}的方式出现
例如:
| 1 | cat.deleteOne({ | 
结果:
| 1 | 删除成功! | 
2.7 更新文档
| 方法 | 参数 | 功能 | 
|---|---|---|
| updateOne | [{属性:值[,…]}],{属性:值[,…]},(err,res)=>{} | 第一个参数为条件对象,第二个参数为更新对象,找到第一个满足条件的文档,按更新对象进行更新 | 
| updateMany | [{属性:值[,…]}],{属性:值[,…]},(err,res)=>{} | 找到所有满足条件的文档,按更新对象进行更新,如第一个条件缺省,则更新数据库中的所有文档 | 
例如
| 1 | cat.updateOne({ | 
结果
| 1 | { n: 1, nModified: 1, ok: 1 } | 
2.8 设置全局属性
mongoose中提供了设置全局属性的方法,这将运用到含有该属性的方法中去
| 1 | mongoose.set('属性名',值) | 
例如,我们可以将原来的连接数据库方式改为
| 1 | //原来 | 
- 注:MongoDB Node.js驱动程序重写了用于解析MongoDB连接字符串的工具。因为这是一个很大的变化,所以他们将新的连接字符串解析器放在一个标志后面。要打开此选项,请将useNewUrlParser选项传递给mongoose.connect()或mongoose.createConnection()。