nodeJS從入門到進階三(MongoDB資料庫)

来源:https://www.cnblogs.com/sgs123/archive/2019/09/03/11451270.html
-Advertisement-
Play Games

一、MongoDB資料庫 1、概念 資料庫(DataBase)是一個按照數據結構進行數據的組織,管理,存放數據的倉庫。 2、關係型資料庫 按照關係模型存儲的資料庫,數據與數據之間的關係非常密切,可以實現跨數據表查詢數據,占用更少的硬碟實現更多的數據存儲 T SQL標準的結構化查詢語言,是關係型資料庫 ...


一、MongoDB資料庫

1、概念

資料庫(DataBase)是一個按照數據結構進行數據的組織,管理,存放數據的倉庫。

2、關係型資料庫

按照關係模型存儲的資料庫,數據與數據之間的關係非常密切,可以實現跨數據表查詢數據,占用更少的硬碟實現更多的數據存儲
T-SQL標準的結構化查詢語言,是關係型資料庫的通用查詢語言
常見的關係型資料庫:Mysql sql-server access sqlite.....

結構:一臺伺服器==》資料庫==》數據表==》數據行

3、非關係型資料庫

不按關係模型存儲的資料庫,統稱為nosql
第一層含義:不是SQL,不是關係型資料庫
第二層含義:Not Only SQL,不僅僅是SQL

結構:一臺伺服器==》資料庫===》集合==》文檔

4、mongDB

mongoDB 是一個基於分散式文件存儲的資料庫,目前是世界上用得最多的非關係型資料庫,也是最像關係型的非關係型資料庫
MongoDB以BSON(二進位+JSON)格式進行數據存儲,可以直接存儲,可以直接存儲對象、數組
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。

使用

  • 官網下載安裝mongoDB軟體
  • 設置環境變數,mongo命令所在位置:C:\program Files\MongoDB\server\3.2\bin 添加到環境變數 修改用戶下PATH的值

創建文件夾

在非系統盤根目錄創建一個文件夾mongodb,在創建兩個子文件夾db和log

將mongoDB掛載成為windows服務

  • 1.使用命令掛載服務

    mongod --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\mongod.log" --install --serviceName "MongoDB"

  • 2.使用服務視窗界面啟動服務

    在電腦點右鍵管理--->服務與應用程式---->服務----->找到MongoDB右鍵啟用

  • 3.或者使用命令行啟動服務

    net start mongodb 開啟服務
    net stop mongodb 關閉服務
    sc delete mongodb 卸載服務

常見問題

32位操作系統 必須加 --storageEngine mmapv1
windows8 windows10 打開命令行用管理員方式打開

5、資料庫常用操作

進入資料庫管理模式

  • 在命令行中運行:mongo 進入數據管理模式
  • 在數據管理模式中只能執行資料庫命令,不能執行其他命令
  • exit 退出資料庫管理模式

資料庫命令:

  • 1.顯示所有的數據列表
    show dbs
  • 2.創建資料庫/進入資料庫
    use 資料庫名
    如果資料庫名不存在,則創建
    如果資料庫已存在,則進入
  • 3.查看當前資料庫是誰
    db
  • 4.刪除資料庫
    db.dropDatabase()

集合命令:

  • 1.顯示當前資料庫中所有集合
    show collections
  • 2.創建集合
    db.集合名.insert({})
    通常,在創建數據時自動創建集合,不需要單獨創建
  • 3.刪除集合
    db.集合名.drop()

文檔(數據)的操作

  • 1.新增文檔 (增)
    db.集合名.insert({})
    db.集合名.save({JSON數據})
    • 例如:
    db.user.insert({"name":"admin","password":"12342423"});
    db.user.save({"username":"admin","password":"12342423"});
    
    /*  insert和save方法的區別:
        .insert() 向集合中插入一條數據【推薦使用】
        .save() 向集合中添加一條數據,如果集合中已存在該數據則更新
    */
  • 2.刪除數據(刪)
    db.集合名.remove({}) //刪除當前集合中的所有數據
    db.集合名.remove({條件}) //刪除指定的數據
    • 例如:
    db.user.remove({"age":"18"})
    
    // 註意:由於刪除和更新會對數據造成極大影響,需謹慎
  • 3.修改數據(改)
    db.集合名.update({查找對象,修改結果})
    • 註意,會修改整條數據
    • 例如:
    db.user.update({"name":"張三"},{"age":18}) //改動整條數據
  • 4.查看文檔數據(查)
    db.集合名.find() //查找當前集合中的所有數據
    db.集合名.find({條件對象}) //將符合條件的數據查出來
    db.集合名.findOne() //查詢到的第一個對象
    db.集合名.find().pretty() //將找到的數據已格式化的結果顯示出來

6、mongoDB高級用法

按指定條件查詢

  • 大於 - $gt
db.集合名.find({欄位名:{$gt:值}})
  • 大於等於 - $gte
db.集合名.find({欄位名:{$gte:值}}) 
  • 小於 - $lt
 db.集合名.find({欄位名:{$lt:值}}) 
  • 小於等於 - $lte
db.集合名.find({欄位名:{$lte:值}})
  • 使用 (<) 和 (>) 查詢指定範圍
db.集合名.find({欄位名:{$gt:小值,$lt:大值}})
  • 使用數組指定範圍 - $in
db.集合名.find({欄位名:{$in:[1,2,3,4]}})
  • 查找數組元素個數 - $size
db.集合名.find({欄位名:{$size:長度}})
  • 判斷是否存在 - $exists
db.集合名.find({欄位名:{$exists:true|false}})
  • 查找多個條件時,符合其中一個就找出來 - $or
db.集合名.find({欄位名:{$or:[{...},{...},...]}})

排序

db.集合名.find().sort({"key":-1,"ke2":1,...}) //1代表升序,-1代表降序

限定輸出limit() skip()

db.集合名.find().limit('數字') //限定輸出數據的條數
db.集合名.find().skip('數字') //跳過指定的數據條數

//這兩個限定輸出的語句主要用於分頁

模糊查詢

db.集合名.find({欄位名:/值/ig}) //使用正則表達式

二、mongoose操作資料庫

1、概念

是一個基於nodeJS的用於操作mongodb資料庫的第三方模塊

2、安裝

npm install mongoose

3、使用

在routes目錄下,在需要用到資料庫的路由添加如下代碼:

var mongoose = require('mongoose');
//連接資料庫
mongoose.connect("mongodb://主機名:27017/資料庫名",function(err){
    if(err){
        throw err;
    }else{
        console.log("資料庫連接成功");
    }
})

//定義骨架
//schema骨架是一種數據結構聲明,不具備資料庫的操作能力
//骨架類型:String、Number、Date、Buffer、ObjectId、Array...
var userSchema = new mongoose.Schema({
    name:String,
    age:{
        type:Number,
        default:0
    },
    sex:{
        type:String
    }
})

//創建模型
//model模型是一種根據骨架創建出的一個模型,具備資料庫操作能力,通常用於讀取資料庫
var listModel = mongoose.model("模型名稱","骨架","集合名稱");

//創建實體Entity
//Entity實體是根據模型創建出的一個實例,具備資料庫操作能力,通常用於寫數據(新增,修改,刪除)
var list = new listModel();
list.屬性名 = 值;
list.save(); //將添到實例上的屬性保存到資料庫中
list.remove();//刪除數據

4、數據操作

查詢數據/讀取數據

//根據條件進行數據查詢,可以找出多條數據
    模型.find({條件},function(err,data){
        //data是從資料庫中讀取到的數據
        //find方法找出來的數據一定是一個數組,即使沒有數據也是一個空數組
    })

//通過ID查找一條數據
    模型.findById('id',function(err,data){
        //find方法找出來的數據一定是一個對象
    })

//另一種常用方法(為了實現更好的鏈式調用)
    模型.find({條件}).exec(function(err,data){})

新增數據

var list = new listModel(); //根據模型創建實例
list.name = '張三';
list.age =23;
//將新增的數據保存到資料庫中
list.save(function(err){
    console.log("新增成功");
})

//註意:骨架中沒有定義的屬性及類型,不能添加到資料庫

刪除數據

/*
    思想:
    第一步:找出要被刪除的數據,
    第二部:調用remove()方法刪除數據
*/
listModel.findById(id).exec(function(err,data){
    data.remove(function(err){});
})

修改數據

/*
    思想:
    第一步:找出要被修改的數據,
    第二部:將數據修改後保存回資料庫
*/
listModel.findById(id).exec(function(err,data){
    data.name = 新的值;
    data.age = 新的值;
    ...
    data.save(function(err){})
})

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 為什麼要用webpack? 現今的很多網頁其實可以看做是功能豐富的應用,它們擁有著複雜的JavaScript代碼和一大堆依賴包。 模塊化,讓我們可以把複雜的程式細化為小的文件; 類似於TypeScript這種在JavaScript基礎上拓展的開發語言:使我們能夠實現目前版本的JavaScript不能 ...
  • python 大蟒蛇 downloads 下載 install 安裝 customize 自定義 path 環境變數:路徑 optional 可選的 feature 特性特點 documentation 文檔 doc associate 關聯 shortcuts 快捷方式 setup 安裝 succ ...
  • 不廢話,直接乾貨 學習前端的幾個個階段: 一階段:html標簽、html5新增標簽、css樣式、css3樣式、媒體查詢等 二階段:JavaScript、jQuery、ajax、面向對象、http傳輸協議等 三階段:canvas、js高級應用、JS-SDK、H5新增技術 四階段:node.js、vue ...
  • 動態規劃 動態規劃(Dynamic Programming,DP)是一種將複雜問題分解成更小的子問題來解決的優化演算法。下麵有一些用動態規劃來解決實際問題的演算法: 最少硬幣找零 給定一組硬幣的面額,以及要找零的錢數,計算出符合找零錢數的最少硬幣數量。例如,美國硬幣面額有1、5、10、25這四種面額,如 ...
  • 2019 年對於大前端技術領域而言變化不算太大,目前三大技術框架日趨成熟,短期內不大可能出現顛覆性的前端框架 (內心 OS:出了也學不動了)。本文結合個人和團隊經歷對 2019 上半年做個技術總結,將各類技術框架、語言、工具分作兩個維度,按照大前端技術架構圖進行分層,大體分為:狀態管理、UI 組件、... ...
  • jquery 實現只能選中一個checkbox,選中當前的去除上一個 ...
  • 1.qrious是基於canvas的純JS二維碼生成插件 1.1什麼是二維碼 二維碼又稱QR Code,QR全稱Quick Response,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的信息,也能表示更多的數據類型。 二維條碼/二維碼(2-dimensio ...
  • 參照網上的一個案例“參照的為繪製的是一個動態的圓環”,現在我的需求是改編成四分之三的圓環實現效果: 樣式展示 canvas繪圖基本操作設置就可以參考源代碼鏈接:原文:https://blog.csdn.net/qq_21058391/article/details/76691047 > 引用的上文源 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...