mongoDB由淺入深講解_概念解析

一、 數據庫概述及環境搭建

1、 爲什麼要使用數據庫
⚫ 動態網站中的數據都是存儲在數據庫中的
⚫ 數據庫可以用來持久存儲客戶端通過表單收集的用戶信息
⚫ 數據庫軟件本身可以對數據進行高效的管理
http://www.czxy.com/article?id=1
http://www.czxy.com/article?id=2
在這裏插入圖片描述 在這裏插入圖片描述在這裏插入圖片描述

2、 什麼是數據庫
數據庫即存儲數據的倉庫,可以將數據進行有序的分門別類的存儲。它是獨立於語言之外的軟件,可以通過
API去操作它。
常見的數據庫軟件有:mysqlmongoDBoracle
在這裏插入圖片描述
在這裏插入圖片描述 在這裏插入圖片描述
3、MongoDB數據庫下載安裝
下載地址:MongoDB數據庫下載地址
在這裏插入圖片描述

4、 MongoDB可視化軟件
MongoDB可視化操作軟件,是使用圖形界面操作數據庫的一種方式。
在這裏插入圖片描述
在這裏插入圖片描述

5、 數據庫相關概念
在一個數據庫軟件中可以包含多個數據倉庫,在每個數據倉庫中可以包含多個數據集合,每個
數據集合中可以包含多條文檔(具體的數據)。
在這裏插入圖片描述
6、 Mongoose第三方包
⚫ 使用Node.js操作MongoDB數據庫需要依賴Node.js第三方包mongoose
⚫ 使用npm install mongoose命令下載

7、 啓動MongoDB
在命令行工具中運行net start mongoDB即可啓動MongoDB,否則MongoDB將無法連接。

8、 數據庫連接
使用mongoose提供的connect方法即可連接數據庫。

mongoose.connect('mongodb://localhost/playground')
.then(() => console.log('數據庫連接成功'))
.catch(err => console.log('數據庫連接失敗', err));

9、 創建數據庫
在MongoDB中 不需要顯式創建數據庫 ,如果正在使用的數據庫不存在,MongoDB會自動創建

二、MongoDB增刪改查操作

1、 創建集合
創建集合分爲兩步,一是對對集合設定規則,二是創建集合,創建mongoose.Schema構造函數的實例即可創建集合。

// 設定集合規則
const courseSchema = new mongoose.Schema({
	name: String,
	author: String,
	isPublished: Boolean
});
// 創建集合並應用規則
const Course = mongoose.model('Course', courseSchema); // courses

2、 創建文檔
創建文檔實際上就是向集合中插入數據
分爲兩步:
① 創建集合實例。
② 調用實例對象下的save方法將數據保存到數據庫中。

// 創建集合實例
const course = new Course({
	name: 'Node.js course',
	author: '恰巧-',
	tags: ['node', 'backend'],
	isPublished: true
});
// 將數據保存到數據庫中
course.save();
Course.create({name: 'JavaScript基礎', author: '恰巧-', isPublish: true}, (err, doc) => {
	// 錯誤對象
	console.log(err)
	// 當前插入的文檔
	console.log(doc)
});
Course.create({name: 'JavaScript基礎', author: '恰巧-', isPublish: true})
.then(doc => console.log(doc))
.catch(err => console.log(err))

3、 mongoDB數據庫導入數據
mongoimport –d 數據庫名稱 –c 集合名稱 –file 要導入的數據文件
找到mongodb數據庫的安裝目錄,將安裝目錄下的bin目錄放置在環境變量中。

4、 查詢文檔

// 根據條件查找文檔(條件爲空則查找所有文檔)
Course.find().then(result => console.log(result))
// 返回文檔集合
[{
_id: 5c0917ed37ec9b03c07cf95f,
name: 'node.js基礎',
author: '恰巧-},{
_id: 5c09dea28acfb814980ff827,
name: 'Javascript',
author: '恰巧-}]
// 根據條件查找文檔
Course.findOne({name: 'node.js基礎'}).then(result => console.log(result))
// 返回文檔
{
_id: 5c0917ed37ec9b03c07cf95f,
name: 'node.js基礎',
author: '恰巧-}
// 匹配大於 小於
User.find({age: {$gt: 20, $lt: 50}}).then(result => console.log(result))
3.4 查詢文檔
// 匹配包含
User.find({hobbies: {$in: ['敲代碼']}}).then(result => console.log(result))
// 選擇要查詢的字段
User.find().select('name email').then(result => console.log(result))
// 將數據按照年齡進行排序
User.find().sort('age').then(result => console.log(result))
// skip 跳過多少條數據 limit 限制查詢數量
User.find().skip(2).limit(2).then(result => console.log(result))

5、 刪除文檔

// 刪除單個
Course.findOneAndDelete({}).then(result => console.log(result))
// 刪除多個
User.deleteMany({}).then(result => console.log(result))

6、 更新文檔

// 更新單個
User.updateOne({查詢條件}, {要修改的值}).then(result => console.log(result))
// 更新多個
User.updateMany({查詢條件}, {要更改的值}).then(result => console.log(result))

7、 mongoose驗證
在創建集合規則時,可以設置當前字段的驗證規則,驗證失敗就則輸入插入失敗。

⚫ required: true 必傳字段
⚫ minlength:3 字符串最小長度
⚫ maxlength: 20 字符串最大長度
⚫ min: 2 數值最小爲2
⚫ max: 100 數值最大爲100
⚫ enum: [‘html’, ‘css’, ‘javascript’, ‘node.js’]
⚫ trim: true 去除字符串兩邊的空格
⚫ validate: 自定義驗證器
⚫ default: 默認值

獲取錯誤信息:error.errors[‘字段名稱’].message

7、 集合關聯
通常不同集合的數據之間是有關係的,例如文章信息和用戶信息存儲在不同集合中,但文章是某個用戶發表的,要查詢文章的所有信息包括髮表用戶,就需要用到集合關聯。
⚫ 使用id對集合進行關聯
⚫ 使用populate方法進行關聯集合查詢
在這裏插入圖片描述
8、 集合關聯實現

// 用戶集合
const User = mongoose.model('User', new mongoose.Schema({ name: { type:
String } }));
// 文章集合
const Post = mongoose.model('Post', new mongoose.Schema({
title: { type: String },
// 使用ID將文章集合和作者集合進行關聯
author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
}));
//聯合查詢
Post.find()
.populate('author')
.then((err, result) => console.log(result));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章