Mongodb基礎(node.js版)

一、Mongodb 介紹

Mongodb 是一個文檔數據庫,以文檔形式存儲數據,格式類似于 JSON

與 Mysql 的特點及選型對照

MongodbMysql
關系類型非關系型關系型
存儲類型文檔存儲(類似于寫 Word )表格存儲 (類似于寫 Excle)
操作類型NoSQL 操作 (不需要寫 sql 語句)SQL 操作
選型對照適合存儲格式比較松散的信息,如“爬蟲”下來的數據適合存儲格式比較規整的信息

說明:并不是說在真實項目中,兩種數據庫只能選其一, 二者是可以同時使用的。對于用戶信息表等規整信息可以采用 Mysql 數據庫存儲,而對于網頁中類似博客內容等大段的富文本信息(同時包含文本、視頻、圖片等),放到 Mysql 數據庫中的一個字段中存儲就不太合適了。

二、Mongodb 及 Compass 安裝

網上安裝的資料很多,這里就不在重復了,大家可以根據以下參考博客進行安裝

Mongodb 安裝

Window 平臺安裝鏈接icon-default.png?t=N7T8https://link.juejin.cn?target=https%3A%2F%2Fwww.runoob.com%2Fmongodb%2Fmongodb-window-install.html

Mac OS 平臺安裝鏈接 (推薦使用 brew 進行安裝)icon-default.png?t=N7T8https://link.juejin.cn?target=https%3A%2F%2Fwww.runoob.com%2Fmongodb%2Fmongodb-osx-install.html

安裝后默認的運行了 Mongodb 服務器,以及連接上了 Mongodb, 可以直接通過命令行進行操作了。如果你還連接不上 Mongodb ,請參考上面安裝連接中的配置。

Mongodb Compass 安裝

Mongodb Compass 是官方推薦的一款可視化工具,可以方便直觀的進行數據的瀏覽和操縱

安裝鏈接icon-default.png?t=N7T8https://link.juejin.cn?target=https%3A%2F%2Fwww.jianshu.com%2Fp%2Fca1e722b6788

三、重要概念

1、和 Mysql 的差異

對于關系型數據庫,使用時通常是先創建數據庫,再創建表,然后對記錄的增刪改查

但在 Mongodb 中這些名詞上有些差異,操作步驟如下:

  • 創建一個數據庫 (database) -- 和 Mysql 相同
  • 創建集合 (collection) -- 對應 Mysql 中的表
  • 對文檔 (document) 的增刪改查 -- 對應 Mysql 中記錄的增刪改查

2、BSON

  • Mongodb 的文檔使用的格式是 BSON
  • BSON = Binary JSON ,是二進制類型的 JSON

四、使用 Compass 操作 Mongodb

1、打開后的界面如圖所示,點擊 “CONNECT” 進行連接

2、新安裝的?Mongodb?默認帶了三個數據庫; 點擊 “CREATE DATABASE” 進行創建數據庫?

?

3、創建數據庫和集合?

?

4、點擊 “ADD DATA” 可以增加文檔?

?

5、文檔的格式如下圖 :?

?

6、對文檔的查找、修改和刪除?

?

注:查找時輸入的數據也是類似于?JSON?的格式

五、使用命令行操作 Mongodb

打開 Mongodb 目錄下 bin/mongo.exe

注:dbName、collName 等 請改為自己創建的數據庫或集合的名字

1、查看操作

# 查看有哪些數據庫
show dbs# 創建或進入數據庫 (當數據庫不存在即創建)
use dbName# 查看有哪些集合
show collections

2、創建集合 / 向集合中插入文檔

# 可以直接向集合插入數據,對不存在的集合將會創建
db.collName.insert({"name":"Axton", "age":20}) 

3、顯示集合中的文檔

# 顯示集合中全部文檔
db.collName.find()# 顯示集合中特定文檔
db.collName.find({ "name":"Axton" })# 排序,按 ID 倒序排序
db.collName.find().sort({_id:-1})

4、更新文檔

db.collName.update({"name":"Axton", $set:{"name": "Axton2"}})

5、刪除文檔

db.collName.update({"name":"Axton", $set:{"name": "Axton2"}})

?

六、Node.js 中使用 mongodb 插件連接數據庫

1、初始化環境

# 初始化 node.js 環境
npm init -y# 安裝 mongodb 模塊
npm i mongodb --save

?2、連接到 Mongodb

const MongoClient = require('mongodb').MongoClientconst url = 'mongodb://localhost:27017'		// 默認端口號為 27017 ,如修改過請自行更改
const dbName = 'mydb'		// 需要連接的數據庫名字MongoClient.connect(url,{// 配置 (默認寫上就好)useUnifiedTopology: true},(err, client) => {if (err) {console.error('mongodn connect error', err)return}console.log('mongodb connect success')// 切換到數據庫const db = client.db(dbName)// 關閉連接client.close()}
)

3、文檔(Document)的操作

查詢文檔
const MongoClient = require('mongodb').MongoClientconst url = 'mongodb://localhost:27017'
const dbName = 'mydb'MongoClient.connect(url, {useUnifiedTopology: true},(err, client) => {if (err) {console.error('mongodn connect error', err)return}console.log('mongodb connect success')const db = client.db(dbName)// 使用集合const usersCollection = db.collection('students')// ------- 文檔的操作代碼寫在此部分,之后將不再包含連接部分代碼 -------// 查詢文檔usersCollection.find({	// find() 內不寫內容則為查詢全部文檔"name" : "Axton"}).toArray((err, res) => {if (err) {console.error(err)return}console.log(res)// find() 為異步操作,為了使查詢完后在關閉數據,所以放至此位置client.close()})// -------------------------------------------------------------}
)
插入文檔
// 插入一條數據, 插入多條可以選擇 insertMany()
usersCollection.insertOne({name: 'Jack',sex: '男',age: 21
}, (err, res) => {if (err) {console.error(err)return}console.log(res)client.close()
})
更新文檔
// 更新一條數據, 更新多條可以選擇 updateMany()
usersCollection.updateOne({name: 'Jack'},   // 查詢條件{$set: {info: '女裝'}},   // 更新的內容(err, res) => {if (err) {console.error(err)return}console.log(res)client.close()}
)
刪除文檔
// 刪除一條數據, 刪除多條可以選擇 deleteMany()
usersCollection.deleteOne({name: 'Jack'
}, (err, res) => {if (err) {console.error(err)return}console.log(res)client.close()
})

4、說明

mongodb?是偏底層一點的插件,此處學習使用此插件是為了讓大家了解連接?mongodb?的一些原理。在日常中,為了利于項目開發,通常使用?mongoose?插件

七、Node.js 中使用 mongoose 插件連接數據庫

1、說明

由于 mongodb 的數據格式過于靈活,容易導致多人開發時數據格式出錯,使用 mongoose 可以更加規范的使用數據.

重要名詞和操作

  • Schema 定義數據格式的規范
  • 以 Model 規范 Collection
  • 規范數據操作的 API

2、初始化環境

安裝 mongoose 插件

npm i mongoose --save

目錄結構

mongoose-test
├── package-lock.json
├── package.json
├── node_modules
└── src├── db.js├── models│	  └── Student.js└── test└── student.js

3、創建連接服務

db.js

const mongoose = require('mongoose')const url = 'mongodb://localhost:27017'
const dbName = 'myblog'mongoose.connect(`${url}/${dbName}`, {useUnifiedTopology: true,useNewUrlParser: true
})const db = mongoose.connection    // 將連接對象賦給 db// 發送錯誤
db.on('error', err => {console.error(err)
})// 連接成功
db.on('open', () => {console.log('success!')
})module.exports = mongoose

4、定義 Schema 規范和創建模型

models/Students.js

// 對應 students 集合const mongoose = require('../db')// 用 Schema 定義數據規范
const StudentSchema = mongoose.Schema({name: {type: String,required: true,unique: true},sex: String,age: Number
}, {timestamps: true  // 時間戳, 在插入、更新數據后將會加上相應的時間數據// 在每一條文檔中加入 createdAt 和 updatedAt
})// Model 對于 Collection
const Student = mongoose.model('student', StudentSchema)module.exports = Student

5、文檔(Document)的操作

test/students.js

查詢文檔
const Student = require('../models/Student')// 自執行的異步函數
!(async () => {// 查詢文檔const res = await Student.find({name: 'Axton'})// 用正則表達式模糊查詢文檔const res2 = await Student.find({name: /A/})// 根據 ID 查詢單條文檔const res3 = await Student.findById('5fb2247e6469170600f02551')})()
插入文檔
const Student = require('../models/Student')!(async () => {// 插入文檔const res = await Student.create({name: 'Jack',age: 21,sex: '男'})})()
更新文檔
const Student = require('../models/Student')!(async () => {// 更新文檔const res = await Student.findOneAndUpdate({name: 'Jack'},   // 查詢的條件{sex: '女'},{new: true  // 返回修改之后的內容,默認為 fasle})})()
刪除文檔
const Student = require('../models/Student')!(async () => {// 刪除文檔const res = await Student.findOneAndDelete({name: 'Jack'})})()

八、總結

本文只是把?mongodb?和?node.js?連接?mongodb?等基礎操作進行了整理,能用在常用的一些場景中。對于更高級的一些操作可以自行參考官方文檔。如果發現本文有錯誤的地方或者寫的不好的地方請在評論區指出。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716201.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java玩轉《啊哈算法》之模擬鏈表

人應該支配習慣,而絕不是讓習慣支配人。一個人要是不能改掉壞習慣,那么他就一文不值。 目錄 緣代碼地址模擬鏈表創建遍歷打印插入插入優化 完整代碼 緣 各位小伙伴們好呀!本人最近看了下《啊哈算法》,寫的確實不錯。 但稍顯遺憾…

【C++】string 類 ( 上)

標準庫中的string類 注意: 1. string是表示字符串的字符串類 2. 該類的接口與常規容器的接口基本相同,再添加了一些專門用來操作string的常規操作。 比特就業課 3. string在底層實際是:basic_string模板類的別名,typedef basi…

python爬蟲之selenium知識點記錄

selenium 一、前期準備 1、概述 selenium本身是一個自動化測試工具。它可以讓python代碼調用瀏覽器。并獲取到瀏覽器中加載的各種資源。 我們可以利用selenium提供的各項功能。 幫助我們完成數據的抓取。 2、學習目標 掌握 selenium發送請求,加載網頁的方法 掌…

Stable-Diffusion ubuntu服務器部署,報錯解決方法(小白教程)

Stable Diffusion是一個深度學習模型,專注于生成高質量的圖像。它由CompVis團隊與Stability AI合作開發,并在2022年公開發布。這個模型使用文本提示(text prompts)生成詳細、逼真的圖像,是目前人工智能圖像生成領域的一…

逆向案例四:360k靜態和精靈數據動態AES解密,用js的方法

一、360K 網頁鏈接:https://www.36kr.com/p/2672600261670407 頁面中有靜態的需要解密的內容,確定html包,確定方法 1.1方法步驟 在下方的搜索中輸入decrypt(或者關鍵字window.initialState ,進入js文件 在AES.decrypt處打上斷點&#xff0…

機器學習-03-機器學習算法流程

總結 本系列是機器學習課程的第02篇,主要介紹機器學習中專家系統的應用介紹 本門課程的目標 完成一個特定行業的算法應用全過程: 定義問題(Problem Definition) -> 數據收集(Data Collection) -> 數據分割(Dataset Spit…

[LeetBook]【學習日記】類鏈表反轉——尋找倒數第cnt個元素

來源于「Krahets」的《圖解算法數據結構》 https://leetcode.cn/leetbook/detail/illustration-of-algorithm/ 題目描述 訓練計劃 II 給定一個頭節點為 head 的鏈表用于記錄一系列核心肌群訓練項目編號,請查找并返回倒數第 cnt 個訓練項目編號。 示例 1&#xff1…

守護無價數據:文件備份的重要性與實用策略

一、數據安全:為何文件備份至關重要 在數字化時代,我們的生活和工作越來越離不開電子設備與其中的文件數據。這些文件可能包含重要的工作文檔、珍貴的家庭照片、個人的創意作品等,它們是我們回憶的載體,也是我們工作和創新的基石…

PDF Expert for Mac v3.9.2中文激活版下載

PDF Expert for Mac是一款易于使用的 PDF 編輯器和注釋器,專為 Mac 設備設計。它允許用戶輕松查看、編輯、簽名、注釋和共享 PDF。該軟件使用戶能夠向他們的 PDF 添加文本、圖像、鏈接和形狀,突出顯示和標記文本,填寫表格以及簽署數字文檔。它…

金融行業專題|期貨超融合架構轉型與場景探索合集(2023版)

更新內容: 更新 SmartX 超融合在期貨行業的覆蓋范圍、部署規模與應用場景。新增 CTP 主席系統實踐與評測、容器云資源池等場景實踐。更多超融合金融核心生產業務場景實踐,歡迎下載閱讀電子書《SmartX 金融核心生產業務場景探索文章合集》。 面對不斷變…

Golang中的四個括號

代碼如下,首先第一個括號內容為wk *worker表示這個函數是一個方法,屬于結構體worker的方法,第二個括號內容為say string,是方法的參數,第三個括號內容err error是方法的返回值,第四個括號是work方法內部的匿…

mac iNode 斷開后沒網 經測試 后臺還在運行

界面斷開,但是連不上網:實際上可能是服務在后臺還在運行 解決方式:終端執行命令 ,手動停止iNode服務 sudo /Library/StartupItems/iNodeAuthService/iNodeAuthService stop 停掉之后,有可能連不上網,斷開wi…

基于springboot+vue的美食推薦商城

博主主頁:貓頭鷹源碼 博主簡介:Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰,歡迎高校老師\講師\同行交流合作 ?主要內容:畢業設計(Javaweb項目|小程序|Pyt…

網工必懂的ICMP協議

福建廈門微思網絡始于2002年,面向全國招生! 主要課程:華為、思科、紅帽、Oracle、VMware、CISP安全系列、PMP....... 網絡工程師實用課程華為HCIA課程介紹 網絡工程師使用課程華為HCIP課程介紹 網絡工程師使用課程華為HCIE課程介紹 因特網…

更詳細的軟件測試理論基礎:流程,開發、測試模型,測試分類,測試用例及其設計方法,缺陷

文章目錄 一、測試流程二、開發模型1、 瀑布模型2、增量模型3、快速模型4、其他 三、測試模型1、V模型2、W模型 四、測試分類五、測試用例 test case六、測試用例設計方法1、等價類劃分法2、邊界值分析法3、因果圖法4、判定表法5、正交法6、場景法7、流程分析法8、錯誤推測法方…

數據分析-Pandas數據的探查面積圖

數據分析-Pandas數據的探查面積圖 數據分析和處理中,難免會遇到各種數據,那么數據呈現怎樣的規律呢?不管金融數據,風控數據,營銷數據等等,莫不如此。如何通過圖示展示數據的規律? 數據表&…

第16章-DNS

目錄 1. 域名 1.1 產生背景 1.2 概述 1.3 域名的樹形層次化結構 2. DNS 2.1 概述 2.2 工作機制 3. DNS查詢模式 3.1 遞歸查詢: 3.2 迭代查詢: 4. 相關知識點 4.1 集中式DNS 4.2 國內通用DNS 4.3 配置DNS代理 1. 域名 1.1 產生背景 ① IP…

【Excel PDF 系列】iText 庫直接實現表格 PDF

你知道的越多,你不知道的越多 點贊再看,養成習慣 如果您有疑問或者見解,歡迎指教: 企鵝:869192208 文章目錄 前言生成表格 PDF 效果引入 pom 配置代碼實現定義 CreateExcelToPdfModel 對象主方法 前言 最近遇到生成 E…

Java必須掌握的繼承中的構造方法和this super關鍵字(含面試大廠題和源碼)

在Java中,繼承中的構造方法和關鍵字this、super是面試中經常涉及的重要話題。下面是一個潛在的大廠面試題,以及可能的解答和討論。 面試題: 請解釋Java中繼承中構造方法的作用以及關鍵字this和super的使用場景。請提供示例代碼加以說明。 …

EchoServer回顯服務器簡單測試

目錄 工具介紹 工具使用 測試結果 工具介紹 github的一個開源項目,是一個測壓工具 EZLippi/WebBench: Webbench是Radim Kolar在1997年寫的一個在linux下使用的非常簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問我們設定的URL,測試網站在壓力下工作的…