MongoDB

关系型和非关系型数据库

关系型数据库(表就是关系,或者说表与表之间存在关系)。

  • 所有的关系型数据库都需要通过sql语言来操作
  • 所有的关系型数据库在操作之前都需要设计表结构
  • 而且数据表还支持约束
    • 唯一的
    • 主键
    • 默认值
    • 非空

非关系型数据库

  • 非关系型数据库非常的灵活
  • 有的关系型数据库就是key-value对儿
  • 但MongDB是长得最像关系型数据库的非关系型数据库
    • 数据库 -》 数据库
    • 数据表 -》 集合(数组)
    • 表记录 -》文档对象

一个数据库中可以有多个数据库,一个数据库中可以有多个集合(数组),一个集合中可以有多个文档(表记录)

{qq:{user:[{},{},{}...]}
}
  • 也就是说你可以任意的往里面存数据,没有结构性这么一说

安装

  • 下载

    • 下载地址:https://www.mongodb.com/download-center/community

  • 安装


一直Next即可。。。

这是安装MongoDB的服务。这是4之后的版本有的,这里安装了以后,就不用配置dbpath和logpath,也不用配置服务了。安装完了,就直接可以使用MongoDB。


npm i mongoose
  • 配置环境变量
  1. 找到安装好的MongoDB文件夹下的bin目录


  • 最后输入mongod --version测试是否安装成功

启动和关闭数据库

启动:

# mongodb 默认使用执行mongod 命令所处盼复根目录下的/data/db作为自己的数据存储目录
# 所以在第一次执行该命令之前先自己手动新建一个 /data/db
mongod

如果想要修改默认的数据存储目录,可以:

mongod --dbpath = 数据存储目录路径

注意:mongodb 4版本以上,不需要再手动区启动服务,默认已经自动启动了

停止:

在开启服务的控制台,直接Ctrl+C;
或者直接关闭开启服务的控制台。

连接数据库

连接:

# 该命令默认连接本机的 MongoDB 服务
mongo

退出:

# 在连接状态输入 exit 退出连接
exit

基本命令

  • show dbs

    • 查看数据库列表(数据库中的所有数据库)
  • db

    • 查看当前连接的数据库
  • use 数据库名称

    • 切换到指定的数据库,(如果没有会新建)

  • show collections

    • 查看当前目录下的所有数据表
  • db.表名.find()

    • 查看表中的详细信息

二、在Node中如何操作MongoDB数据库

使用官方的MongoDB包来操作

​ http://mongodb.github.io/node-mongodb-native/
https://www.npmjs.com/package/mongodb

使用第三方包mongoose来操作MongoDB数据库(推荐)

​ 第三方包:mongoose基于MongoDB官方的mongodb包再一次做了封装,名字叫mongoose,是WordPress项目团队开发的。

​ https://mongoosejs.com/

mongoose的第一个demo

新建一个项目文件夹:mongoose-demo,然后cmd 执行 npm init -y:

执行npm install mongoose

demo1.js:

// 1. 引入包
const mongoose = require('mongoose');// 2. 连接MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true,useUnifiedTopology: true
});// 3. 创建一个模型
// 就是在设计数据库
// MongoDB是动态的,非常灵活,只需要在代码中设计你的数据库就可以了
// mongoose 这个包就可以让你的设计编写过程变得非常的简单
const Cat = mongoose.model('Cat', {name: String
});// 4. 实例化一个Cat
const kitty = new Cat({name: 'Zildjian'
});// 5. 持久化保存kitty实例
kitty.save().then(() => console.log('meow'));



mongoose:

官网:http:/mongoosejs.com/
官方指南:http:/mongoosejs.com/docs/guide.html
官方API文档:http:/mongooseis.com/docs/api.html

mongoose基本使用:

1. 设计Schema发布Model:
// 1.导包
const mongoose = require('mongoose')const Schema = mongoose.Schema// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({username: {type: String,require: true // 必须有该属性},password: {type: String,require: true},email: {type: String}
});// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
//              mongoose会自动将大写名词的字符串生成小写复数的集合名称
//              例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User',userSchema)// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
2. 增加数据
// 1.导包
const mongoose = require('mongoose')const Schema = mongoose.Schema// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({username: {type: String,require: true // 必须有该属性},password: {type: String,require: true},email: {type: String}
});// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
//              mongoose会自动将大写名词的字符串生成小写复数的集合名称
//              例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User',userSchema)// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
var admin = new User({username: 'admin',password: '123456',email: 'admin@admin.com'
})admin.save(function(err, ret) {if(err) {console.log('保存失败')} else {console.log('保存成功!')console.log(ret)}
})

3. 查询数据
// 1.导包
const mongoose = require('mongoose')const Schema = mongoose.Schema// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({username: {type: String,require: true // 必须有该属性},password: {type: String,require: true},email: {type: String}
});// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
//              mongoose会自动将大写名词的字符串生成小写复数的集合名称
//              例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({username: 'zepzep',password: '000000',email: 'zep@zep.com'
})admin.save(function(err, ret) {if(err) {console.log('保存失败')} else {console.log('保存成功!')console.log(ret)}
}) */// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {if(err) {console.log('查询失败')} else {console.log(ret)}
}) */// 2.按条件查询数据,返回值为数组
/* User.find({username: 'zepzep'
}, function(err, ret) {if (err) {console.log('查询失败')} else {console.log(ret)}
})*/// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
User.findOne({username: 'zepzep',password: '111'
}, function(err, ret) {if (err) {console.log('查询失败')} else {console.log(ret)}
})

4. 删除数据
// 1.导包
const mongoose = require('mongoose')const Schema = mongoose.Schema// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({username: {type: String,require: true // 必须有该属性},password: {type: String,require: true},email: {type: String}
});// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
//              mongoose会自动将大写名词的字符串生成小写复数的集合名称
//              例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({username: 'zepzep',password: '000000',email: 'zep@zep.com'
})admin.save(function(err, ret) {if(err) {console.log('保存失败')} else {console.log('保存成功!')console.log(ret)}
}) */// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {if(err) {console.log('查询失败')} else {console.log(ret)}
}) */// 2.按条件查询数据,返回值为数组
/* User.find({username: 'zepzep'
}, function(err, ret) {if (err) {console.log('查询失败')} else {console.log(ret)}
})*/// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
/* User.findOne({username: 'zepzep',password: '111'
}, function(err, ret) {if (err) {console.log('查询失败')} else {console.log(ret)}
}) */// 删除数据操作
User.remove({username: 'zepzep'
}, function(err, ret) {if(err) {console.log('删除失败')} else {console.log('删除成功!')console.log(ret)}
})

5.更新数据
// 1.导包
const mongoose = require('mongoose')const Schema = mongoose.Schema// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({username: {type: String,require: true // 必须有该属性},password: {type: String,require: true},email: {type: String}
});// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
//              mongoose会自动将大写名词的字符串生成小写复数的集合名称
//              例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({username: 'zepzep',password: '000000',email: 'zep@zep.com'
})admin.save(function(err, ret) {if(err) {console.log('保存失败')} else {console.log('保存成功!')console.log(ret)}
}) */// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {if(err) {console.log('查询失败')} else {console.log(ret)}
}) */// 2.按条件查询数据,返回值为数组
/* User.find({username: 'zepzep'
}, function(err, ret) {if (err) {console.log('查询失败')} else {console.log(ret)}
})*/// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
/* User.findOne({username: 'zepzep',password: '111'
}, function(err, ret) {if (err) {console.log('查询失败')} else {console.log(ret)}
}) */// 删除数据操作
/* User.remove({username: 'zepzep'
}, function(err, ret) {if(err) {console.log('删除失败')} else {console.log('删除成功!')console.log(ret)}
}) */// 更新数据操作
User.findByIdAndUpdate('6062cff077b662686460e549', {password: '123'
}, function(err, ret) {if(err) {console.log('更新失败')} else {console.log('更新成功!')console.log(ret)}
})

使用mongoose 在 Node中操作MongoDB数据库相关推荐

  1. 58 Node.js中操作mongoDB数据库

    技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder 的程序人生 1.数据库概述及环境搭建 1.1 为什么要使用数据库 动态网站中的数据都是存储在数据 ...

  2. MongoDB简介、在node中使用MongoDB

    MongoDB数据库简介: 使用MongoDB的好处是不用SQL语句,它提供了对应的API,其功能和MYSQL基本相同,是最像关系型数据库的非关系型数据库:不需要设计表的结构,文档相当于json,如果 ...

  3. node中操作MySQL

    node操作MySQL数据库: 在node中操作MySQL数据库的基本流程如下: // node操作MySQL需要在npm官网下载mysql包并载入node执行代码:// 1.载入MySQL数据库包v ...

  4. node用mongodb还是mysql,Node 操作 mongoDB 数据库和 mySQL数据库

    下载安装 MongoDB image.png 直接点击下载就行了 image.png 安装 mongodb 一直点击下一步,知道这一步 image.png 选中自己选择想安装的目录路径(选择安装的目录 ...

  5. nodejs操作mongodb数据库(mongoose)

    准备 在上一篇的基础上,通过npm安装mongoose. 关于mongoose Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB n ...

  6. 使用第三方包mongoose来操作MongoDB数据库,解决报错:MongooseError

    使用第三方包mongoose来操作MongoDB数据库 官方网站 配置文件 异常 异常描述: MongooseError: Operation cats.insertOne() buffering t ...

  7. eggjs使用egg-mongoose操作MongoDB数据库

    eggjs使用egg-mongoose操作MongoDB数据库 npm安装mongoose依赖 npm install egg-mongoose --save 配置config/plugin.js和c ...

  8. Python 操作 MongoDB 数据库!

    作者 |黄伟呢 来源 |数据分析与统计学之美 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 先来看看MySQL与MongoDB 概念区别 ...

  9. spring mysql mongdb_Spring Boot中使用MongoDB数据库的方法

    MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自"humongous",是一种开源的文 ...

最新文章

  1. ASP.NET跨服务器上传文件的相关解决方案
  2. Vue.2.0.5-模板语法
  3. 父亲节python代码_python 计算 父亲节
  4. sql语句or与union all的执行效率比较
  5. python re模块compile_Python re模块的match方法
  6. python打印九九加法表_Python小脚本
  7. ubuntu linux网关不通,Ubuntu 8.04不能上网等问题的解决
  8. Hyper-V提供创建三种类型的虚拟网络
  9. hadoop1.X安装
  10. android显示缩略图,Android:是否可以显示视频缩略图?
  11. 计算机软件著作权收钱么,计算机软件著作权登记收费吗
  12. T32 dump 连续寄存器
  13. VB对IE浏览器完全控制
  14. Android【1】:一文教你使用Camille+夜神模拟器实现安卓应用隐私合规辅助检测
  15. Linux 安装gcc编译器
  16. easyexcel实现代码生成xlsx文件并保存到云端
  17. 随记(浅谈误导--交流的断章取义)
  18. 软件设计七大设计原则
  19. scratch加法出题机 电子学会图形化编程scratch等级考试三级真题和答案解析2021-3
  20. cogs1619. [HEOI2012]采花 x

热门文章

  1. ancestral 箭头符号,译林版《牛津高中英语》模块五 高二上学期
  2. 装机之windows10和ubuntu双系统
  3. Flask的csrf_token的用法
  4. qt android glsl,基于Qt的OpenGL学习(1)—— Hello Triangle
  5. bem什么意思_bem是什么意思_bem的翻译_音标_读音_用法_例句_爱词霸在线词典
  6. LeetCode8——String to Integer (atoi)(自己编写atoi函数)
  7. LESS实战::not与:hover混合使用
  8. ES6 数组、对象的扩展
  9. Git安装及密钥的生成并上传本地文件到GitHub上
  10. javascript常用内置对象总结(重要)