NodeJS+Express+MongoDB - 張果 - 博客園

目錄

  • 一、MongoDB
    • 1.1、安裝MongoDB
      • 1.1.1、配置運行環境
      • 1.1.2、運行MongoDB
    • 1.2、數據庫操作
      • 1.2.1、創建數據庫與查看數據庫
      • 1.2.2、刪除數據庫
      • 1.2.3、插入數據
      • 1.2.4、查詢數據
      • 1.2.5、修改
      • 1.2.6、刪除
  • 二、NodeJS訪問MongoDB
    • 2.1、安裝MongoDB訪問驅動
    • 2.2、添加數據
    • 2.3、修改數據
    • 2.4、查詢數據
    • 2.5、刪除數據
  • 三、NodeJS+Express+MongoDB示例
  • 四、示例下載

一、MongoDB

MongoDB是開源,高性能的NoSQL數據庫;支持索引、集群、復制和故障轉移、各種語言的驅動程序豐富;高伸縮性;
MongoDB 是一個基于分布式文件存儲的數據庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。

官網地址:http://www.mongodb.org/

github:https://github.com/mongodb/

API Docs:http://docs.mongodb.org/manual/

nodejs驅動:https://github.com/mongodb/node-mongodb-native

1.1、安裝MongoDB

下載地址:http://www.mongodb.org/downloads

下載成功后點擊msi文件直接安裝,這里以win7_64位的操作系統為例。

1.1.1、配置運行環境

1)、創建存放數據的文件夾

在任意沒有中文的目錄下新建文件夾,如c:\data,在文件夾下存放MongoDB數據庫文件與日志文件,如:

c:\data\db用于存放mongodb的數據文件

c:\data\log用于存放mongodb的日志文件

2)、創建配置文件

打開MongoDB的安裝目錄如“C:\Program Files\MongoDB\Server\3.4\bin”,并在此目錄下新建一個mongo.config文件,文件內容如下:

復制代碼

##數據庫目錄##
dbpath=C:\data\db##日志輸出文件##
logpath=C:\data\log\db.log

復制代碼

3) 、安裝Windows服務

使用cmd進入命令行

使用cd切換目錄到安裝目錄下,如:cd ?C:\Program Files\MongoDB\Server\3.4\bin

安裝MongoDB服務且指定配置文件,如:

mongod --config "C:\Program Files\MongoDB\Server\3.4\bin\mongo.config" --install

4)、錯誤處理

如果運行過程中提示“無法定位程序輸入點ucrtbase.terminate于動態鏈接庫api-ms-win-crt-runtime-|1-1-0.dll”錯誤,請下載安裝“vc_redist.x64”,如果vc redis.x64安裝失敗請先下載補丁(KB2999226)再安裝。

5)、添加環境變量
在計算機->右鍵->高級->在環境變量PATH中加入"C:\Program Files\MongoDB\Server\3.4\bin"路徑。

6)、啟動服務
在cmd窗口中運行如下命令開始服務,也可以在可以在“控制面板\所有控制面板項\管理工具\服務”手動開啟,注意默認是開機就自動啟動服務的,可以設置成手動啟動。

net start mongodb

停止服務

net stop mongodb

在cmd中運行如下命令

這樣安裝就成功了!

1.1.2、運行MongoDB

1)、直接運行

如果安裝完成后不想做任何配置,可以直接運行,其中mongod.exe是服務,應該先啟動,如:

啟動客戶端mongo.exe文件,如:

2)、啟動服務后運行

使用net start mongodb或手動啟動服務器運行客戶端mongo.exe文件。

3)、可視化工具

當服務啟動成功后,如果認為命令行操作不方便,可以使用robomongo等GUI工具。

官網:https://robomongo.org/

?第二項是一個綠色版的,解壓后在文件夾中找到exe文件直接運行即可。

1.2、數據庫操作

1.2.1、創建數據庫與查看數據庫

以下實例我們創建了數據庫gomall
> use?gomall
switched to db?gomall
> db
gomall

如果使用GUI工具在連接名稱上右鍵create database也可以創建數據庫:

?創建成功后如下所示:

Collections表示集合,類似關系數據庫中的表。

Functions表示函數,類似關系數據庫中的存儲過程與函數。

Users表示用戶。

document表示記錄,類似關系數據為中的記錄或行。

如果你想查看所有數據庫,可以使用 show dbs 命令:
> show dbs

MongoDB 中默認的數據庫為 test,如果你沒有創建新的數據庫,集合將存放在 test 數據庫中。

1.2.2、刪除數據庫

> use?gomall
switched to db gomall
> db.dropDatabase()
{ "dropped" : "gomall", "ok" : 1 }

1.2.3、插入數據

a)、db.集合.insert(數據)

這里的數據可以是JSON

先打開shell腳本編寫的界面,操作如下:

db.products.insert({name:"iphone",price:1988});

從上圖操作可以看出,沒有去創建“products”集合,其實通過插入操作也會自動創建
_id,是mongodb自已生成的,每行數據都會存在,默認是ObjectId,可以在插入數據時插入這個鍵的值(支持mongodb支持的所有數據類型) 

查看數據:db.getCollection('products').find({})

b)、db.表名.save(數據);

db.products.save({_id:2,name:"HuWei P9",price:2988});

_id可以自已插入、一個表中不一定要字段都相同,雖然insert和save方法都可以插入數據,當默認的“_id”值已存在時,調用insert方法插入會報錯;而save方法不會,會更新相同的_id所在行數據的信息。

c)、批量添加

mongodb的shell中可以使用javascript腳本,如

for(var i=0;i<5;i++)db.users.save({'_id':i,'name':'zhangguo'+i,'age':i+8});

1.2.4、查詢數據

a)、查詢集合中所有數據:db.集合.find();

db.users.find({name:'zhangguo0'});

b)、按條件查詢(支持多條件):db.集合.find(條件);

db.users.find({name:'zhangguo0',age:9});?

對象中的條件要求同時成立

c)、查詢第一條(支持條件):db.集合.findOne(條件);

d)、限制數量:db.集合.find().limit(數量);

e)、跳過指定數量:db.表名.find().skip(數量);

f)、比較查詢
大于:小于:gt小于:lt
大于等于:小于等于:gte小于等于:lte
非等于:$ne

db.users.find({age:{'$gt':9}});

查找年齡大于9且小于11歲的

db.users.find({age:{'gt′:9,′lt':11}});

g)、查詢數量:db.表名.find().count();

h)、排序:db.表名.find().sort({"字段名":1});

1:表示升序,-1:表示降序

i)、指定字段返回: db.表名.find({},{"字段名":0}); ?參數1:返回 0:不返回

1.2.5、修改

前面save在_id字段已存在是就是修改操作,按指定條件修改語法如下:

db.集合.update({"條件字段名":"字段值"},{$set:{"要修改的字段名":"修改后的字段值"}});

db.users.update({age:{'$eq':9}},{$set:{age:100}});

修改多條:

db.users.updateMany({age:{"$gte":10}},{$set:{age:30}});

1.2.6、刪除

db.集合.remove(條件);

db.users.remove({age:{'$gte':10}}); ?刪除年齡>=10歲的數據

二、NodeJS訪問MongoDB

MongoDB對許多平臺都提供驅動可以訪問數據庫,如C#、Java、Node.js等。這里以Node.js為例。

2.1、安裝MongoDB訪問驅動

使用包管理器,在命令行執行如下指令:

全局安裝驅動

npm install mongodb -g

在當前項目中引入mongodb

npm install mongodb --save

這樣添加驅動就成功了。

2.2、添加數據

在項目的根目錄下新建一個db.js文件,使用Node.js操作MongoDB。

示例代碼:

復制代碼

//引入mongodb模塊,獲得客戶端對象
var MongoClient = require('mongodb').MongoClient;
//連接字符串
var DB_CONN_STR = 'mongodb://localhost:27017/gomall';    //定義函數表達式,用于操作數據庫并返回結果
var insertData = function(db, callback) {  //獲得指定的集合 var collection = db.collection('users');//插入數據var data = [{_id:7,"name":'rose',"age":21},{_id:8,"name":'mark',"age":22}];collection.insert(data, function(err, result) { //如果存在錯誤if(err){console.log('Error:'+ err);return;} //調用傳入的回調方法,將操作結果返回callback(result);});
}//使用客戶端連接數據,并指定完成時的回調方法
MongoClient.connect(DB_CONN_STR, function(err, db) {console.log("連接成功!");//執行插入數據操作,調用自定義方法insertData(db, function(result) {//顯示結果console.log(result);//關閉數據庫db.close();});
});

復制代碼

運行結果:

復制代碼

連接成功!
{ result: { ok: 1, n: 2 },ops: [ { _id: 7, name: 'rose', age: 21 },{ _id: 8, name: 'mark', age: 22 } ],insertedCount: 2,insertedIds: [ 7, 8 ] }

復制代碼

2.3、修改數據

示例代碼:

復制代碼

//引入mongodb模塊,獲得客戶端對象
var MongoClient = require('mongodb').MongoClient;
//連接字符串
var DB_CONN_STR = 'mongodb://localhost:27017/gomall';    //定義函數表達式,用于操作數據庫并返回結果
var updateData = function(db, callback) {  //獲得指定的集合 var collection = db.collection('users');//要修改數據的條件,>=10歲的用戶var  where={age:{"$gte":10}};//要修改的結果var set={$set:{age:95}};collection.updateMany(where,set, function(err, result) { //如果存在錯誤if(err){console.log('Error:'+ err);return;} //調用傳入的回調方法,將操作結果返回callback(result);});
}//使用客戶端連接數據,并指定完成時的回調方法
MongoClient.connect(DB_CONN_STR, function(err, db) {console.log("連接成功!");//執行插入數據操作,調用自定義方法updateData(db, function(result) {//顯示結果console.log(result);//關閉數據庫db.close();});
});

復制代碼

運行結果:

連接成功!
{ result: { n: 5, nModified: 5, ok: 1 }

2.4、查詢數據

示例代碼:

復制代碼

//引入mongodb模塊,獲得客戶端對象
var MongoClient = require('mongodb').MongoClient;
//連接字符串
var DB_CONN_STR = 'mongodb://localhost:27017/gomall';    //定義函數表達式,用于操作數據庫并返回結果
var findData = function(db, callback) {  //獲得指定的集合 var collection = db.collection('users');//要查詢數據的條件,<=10歲的用戶var  where={age:{"$lte":10}};//要顯示的字段var set={name:1,age:1};collection.find(where,set).toArray(function(err, result) { //如果存在錯誤if(err){console.log('Error:'+ err);return;} //調用傳入的回調方法,將操作結果返回callback(result);});
}//使用客戶端連接數據,并指定完成時的回調方法
MongoClient.connect(DB_CONN_STR, function(err, db) {console.log("連接成功!");//執行插入數據操作,調用自定義方法findData(db, function(result) {//顯示結果console.log(result);//關閉數據庫db.close();});
});

復制代碼

運行結果:

連接成功!
[ { _id: 0, name: 'zhangguo0', age: 8 },{ _id: 1, name: 'zhangguo1', age: 9 } ]

2.5、刪除數據

?示例代碼:

復制代碼

//引入mongodb模塊,獲得客戶端對象
var MongoClient = require('mongodb').MongoClient;
//連接字符串
var DB_CONN_STR = 'mongodb://localhost:27017/gomall';    //定義函數表達式,用于操作數據庫并返回結果
var findData = function(db, callback) {  //獲得指定的集合 var collection = db.collection('users');//要刪除數據的條件,_id>2的用戶刪除var  where={_id:{"$gt":2}};collection.remove(where,function(err, result) { //如果存在錯誤if(err){console.log('Error:'+ err);return;} //調用傳入的回調方法,將操作結果返回callback(result);});
}//使用客戶端連接數據,并指定完成時的回調方法
MongoClient.connect(DB_CONN_STR, function(err, db) {console.log("連接成功!");//執行插入數據操作,調用自定義方法findData(db, function(result) {//顯示結果console.log(result);//關閉數據庫db.close();});
});

復制代碼

運行結果:

連接成功!
{ result: { n: 4, ok: 1 },

三、NodeJS+Express+MongoDB示例

四、示例下載

?git:https://coding.net/u/zhangguo5/p/NodeJS002/git

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

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

相關文章

一個好用的瀏覽器暗色瀏覽插件 Dark Reader

轉載于:https://www.cnblogs.com/tyong/p/9973363.html

Android小測驗感受

1.運行出現“...keeps stopping” 因為 前臺變量“無值”而后臺卻進行“獲取變量值” 2.switch(int,char...) case break;(不能忘) 3.轉載于:https://www.cnblogs.com/tangxx1996/p/10825134.html

SpringMVC ?注解式傳遞Ztree參數

前端頁面JS處理&#xff1a; $("#save").click( function(){var zTree $.fn.zTree.getZTreeObj("treeDemo" );if(projectType "" || projectType null || projectType undefined){alert( "請選擇項目類型&#xff01;" ); return…

實驗 4 [bx]和 loop 的使用

實驗結論 實驗1&#xff1a;綜合使用 loop,[bx]&#xff0c;編寫完整匯編程序&#xff0c;實現向內存 b800:07b8 開始的連續 16 個字單元重復填充字數據 0403H。 1.源代碼及實驗結果 運行結果&#xff1a;屏幕中央出現一排紅色的心?。 2.將源代碼程序中字數據 0403H→修改為 0…

linux開發工具之gcc

首先gcc編譯鏈接的一個實例如下所示&#xff1a; 接下來看一下gcc的常見選項&#xff1a; gcc的使用示例&#xff1a; 轉載于:https://www.cnblogs.com/wsw-seu/p/10826124.html

怎么解決eclipse報PermGen space異常的問題

怎么解決eclipse報PermGen space異常的問題 最近使用eclipse做開發&#xff0c;使用的服務器是tomcat&#xff0c;但在啟動時報了Caused by: java.lang.OutOfMemoryError: PermGen space的異常。 這個錯誤很常見&#xff0c;于是配置tomcat下的catalina.bat&#xff0c;配置e…

org.hibernate.service.ServiceRegistryBuilder被棄用

看視頻教程是這樣寫的: //創建配置對象Configuration config new Configuration().configure();//創建服務注冊對象ServiceRegistry serviceRegistry new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();//創建會話工廠對象session…

音頻基本概念

音頻基本概念 聲音的本質 音調&#xff1a;頻率 音量&#xff1a;振幅 音色&#xff1a;與材質有關&#xff0c;諧波&#xff08;不規則的正玄波&#xff09; 屏幕快照 2018-12-04 下午1.53.40.png采樣-量化-編碼 采樣大小&#xff1a; 一個采樣用多少bit存放&#xff0c;目前常…

How to use external classes and PHP files in Laravel Controller?

By: Povilas KoropLaravel is an MVC framework with its own folder structure, but sometimes we want to use something external which doesn’t follow the same structure. Let’s review two different scenarios – when we have external class and when it’s just a…

在多種瀏覽器中嵌入Applet

1 基本信息 摘要&#xff1a;一個開發好的Java Applet&#xff0c;是通過標準的標簽&#xff08;Tag&#xff09;嵌入到HTML頁面中的。瀏覽器在解析到支持的嵌入Applet的標簽時&#xff0c;會啟動Java Plug-in來渲染標簽中的Java Applet。 由于歷史原因&#xff0c;在頁面中嵌…

share團隊沖刺3

團隊沖刺第三天 昨天&#xff1a;完成了對輸出文字&#xff0c;按鈕控件的添加&#xff0c;能夠將其在模擬器上運行 今天&#xff1a;學習輸入的添加方式 問題&#xff1a;Android resource linking failed 在改變按鈕樣式的時候&#xff0c;出現了這個問題&#xff0c;正在百度…

Django學習手冊 - ORM 數據創建/表操作 匯總

ORM 查詢的數據類型: QuerySet與惰性機制(可以看作是一個列表) 所謂惰性機制:表名.objects.all()或者.filter()等都只是返回了一個QuerySet&#xff08;查詢結果集對象&#xff09;&#xff0c;它并不會馬上執行sql&#xff0c;而是當調用QuerySet的時候才執行。 QuerySet特點&…

applet實現大文件ftp上傳(三)

下一步呢&#xff0c;當然就是對這個jar文件進行數字證書包裝。流程如下&#xff1a; <1>、生成密匙證書(key certificate)&#xff0c;該證書將存儲在你的.keystore文件中。Validity指的是密匙的有效期&#xff0c;默認是180&#xff0c;但是這里我們需要一年的時間&am…

網站301重定向 解決方法

網站301重定向&#xff0c;一般都是將不帶www的域名轉向帶有www的&#xff0c;有幾個小朋友問過幾次需要在哪改&#xff0c;寫出來不會的參考下。 1、新建一個“.htaccess”文件 2、復制以下代碼&#xff1a;&#xff08;a你的域名&#xff09; Options FollowSymLinks rewrite…

Vue 從入門到進階之路(十四)

之前的文章我們對 vue 的基礎用法已經有了很直觀的認識&#xff0c;本章我們來看一下 vue 中的生命周期函數。 上圖為 Vue官方為我們提供的完整的生命周期函數的流程圖&#xff0c;下面的案例我們只是走了部分情況流程&#xff0c;但所有的生命周期函數都涉及到了。 1 <!DOC…

css 清除浮動float 嗒嘀嗒滴 ----20181120

手動給父元素添加高度通過clear清除內部和外部浮動給父元素添加overfloat屬性并結合zoom:1使用給父元素添加浮動        常用方法&#xff1a; ①給兄弟元素添加clear屬性&#xff1a;添加一個class為clear&#xff1a;both&#xff0c; ②添加偽類&#xff1a;.clearf…

applet實現大文件ftp上傳(一)

由于要用APPLET實現大文件FTP上傳下載&#xff0c;從網上搜索了幾下&#xff0c;找到很多資料&#xff0c;最后決定采用基于 org.apache.commons.net.ftp包實現FTP上傳下載&#xff0c;Net包中的類既提供對協議的底層訪問也有高層的抽象。在大多數情況下&#xff0c;抽 象是足夠…

微軟最爽命令行工具發布!

最近微軟發布了命令行工具Windows Terminal&#xff0c;簡直要讓我們爽翻天 長期以來&#xff0c;Linux和Mac下的命令行工具自成一派&#xff0c;Windows卻是另一套命令系統。這就比較惡心了&#xff0c;這也是很多開發者不選擇Windows系統的原因。 但是現在完全不一樣了&#…

定時任務 Cron表達式

Cron表達式由6~7項組成&#xff0c;中間用空格分開。從左到右依次是&#xff1a; 秒、分、時、日、月、周幾、年&#xff08;可省略&#xff09; Cron表達式的值可以是數字&#xff0c;也可以是以下符號&#xff1a; "*"&#xff1a;所有值都匹配 "?"&…

vue項目中 axios請求攔截器與取消pending請求功能 - 年少、 - 博客園

在開發vue項目中&#xff0c;請求是不可缺少的&#xff0c;在發送請求時常常需要統一處理一些請求頭參數等設置與響應事件&#xff0c;這時利用請求攔截器再好不過。 這里以axios請求為例 實現了設置統一請求頭添加token, 其中token在登錄時被存入了localStorage中。 同時攔…