使用mongoose 在 Node中操作MongoDB数据库
MongoDB
關系型和非關系型數據庫
關系型數據庫(表就是關系,或者說表與表之間存在關系)。
- 所有的關系型數據庫都需要通過sql語言來操作
- 所有的關系型數據庫在操作之前都需要設計表結構
- 而且數據表還支持約束
- 唯一的
- 主鍵
- 默認值
- 非空
非關系型數據庫
- 非關系型數據庫非常的靈活
- 有的關系型數據庫就是key-value對兒
- 但MongDB是長得最像關系型數據庫的非關系型數據庫
- 數據庫 -》 數據庫
- 數據表 -》 集合(數組)
- 表記錄 -》文檔對象
一個數據庫中可以有多個數據庫,一個數據庫中可以有多個集合(數組),一個集合中可以有多個文檔(表記錄)
{qq:{user:[{},{},{}...]} }- 也就是說你可以任意的往里面存數據,沒有結構性這么一說
安裝
-
下載
- 下載地址:https://www.mongodb.com/download-center/community
- 下載地址:https://www.mongodb.com/download-center/community
-
安裝
一直Next即可。。。
這是安裝MongoDB的服務。這是4之后的版本有的,這里安裝了以后,就不用配置dbpath和logpath,也不用配置服務了。安裝完了,就直接可以使用MongoDB。
- 配置環境變量
- 最后輸入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数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react-router的使用(一)——
- 下一篇: 五、MySQL联合查询学习笔记 + 查询