国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Nodejs使用Mongodb存儲與提供后端CRD服務(wù)詳解

2019-11-19 13:02:54
字體:
供稿:網(wǎng)友

前言

眾所周知JS是腳本語言,腳本語言都需要一個解析器才能運(yùn)行。對于寫在HTML頁面里的JS,瀏覽器充當(dāng)了解析器的角色。而對于需要獨(dú)立運(yùn)行的JS,NodeJS就是一個解析器。

每一種解析器都是一個運(yùn)行環(huán)境,不但允許JS定義各種數(shù)據(jù)結(jié)構(gòu),進(jìn)行各種計算,還允許JS使用運(yùn)行環(huán)境提供的內(nèi)置對象和方法做一些事情。例如運(yùn)行在瀏覽器中的JS的用途是操作DOM,瀏覽器就提供了document之類的內(nèi)置對象。而運(yùn)行在NodeJS中的JS的用途是操作磁盤文件或搭建HTTP服務(wù)器,NodeJS就相應(yīng)提供了fs、http等內(nèi)置對象。

本文會把一個對象todo對象(有屬性{id,name})存儲到Mongodb,做查詢刪除的測試(Create Remove Delete = CRD)。這個測試包括使用Mongodb Shell,使用CallBack古典風(fēng)格的訪問代碼,以及使用Await/Async的現(xiàn)代風(fēng)格的代碼。完成這個這個驗證后,就可以掌握最初步的Mongodb了。

我使用的Nodejs是10.7 。操作系統(tǒng)環(huán)境為Mac OS X High Sierra。

準(zhǔn)備環(huán)境

安裝和運(yùn)行Mongodb Daemon

brew install mongodbmongodb

訪問驗證

首先執(zhí)行Mongodb Shell:

mongo

輸入命令,查詢數(shù)據(jù)庫清單:

> show dbslocal  0.000GB

創(chuàng)建一個數(shù)據(jù)庫

use todos

(若database不存在,則會創(chuàng)建一個,此時若不做任何操作直接退出,則MongoDB會刪除該數(shù)據(jù)庫)

db.todos.insert({id:1,name:"reco"})db.todos.insert({id:2,name:"rita"})

查詢 :

db.todos.find(){ "_id" : ObjectId("5b727c0846b6c71a98d3af52"), "id" : 1, "name" : "reco" }{ "_id" : ObjectId("5b727c7046b6c71a98d3af53"), "id" : 2, "name" : "reta" }

刪除記錄:

db.todo.remove({id:1})

刪除數(shù)據(jù)庫

db.todo.drop()

使用nodejs方式訪問Mongodb

使用nodejs執(zhí)行類似Shell對對象的CRD,代碼如下:

var MongoClient = require('mongodb').MongoClient;var url = "mongodb://localhost:27017/todos";MongoClient.connect(url, function(err, db) { if (err) throw err; console.log("Database created!"); var dbo = db.db("todos"); // var myobj = { id: 1, name: "reco" }; // dbo.collection("todo").insertOne(myobj, function(err, res) { // if (err) throw err; // console.log("1 document inserted"); // db.close(); // }); var myobj = [ { id: 1, name: 'reco'}, { id: 2, name: 'rita'}, ]; dbo.collection("todo").insertMany(myobj, function(err, res) { if (err) throw err; console.log("Number of documents inserted: " + res.insertedCount); dbo.collection("todo").find({}).toArray(function(err, result) { if (err) throw err; console.log(result); var myquery = { id: 1 }; dbo.collection("todo").deleteMany(myquery, function(err, obj) { if (err) throw err; console.log("document deleted"); db.close(); }); });  });})

代碼非常簡單,無需更多解釋。此代碼使用了mongodb模塊,需要首先安裝:

npm init -ynpm i mongodb --save

然后使用node index.js運(yùn)行即可看到效果:

Database created!Number of documents inserted: 2[ { _id: 5b72ab9e3245f169ef5f43d2, id: 1, name: 'reco' }, { _id: 5b72ab9e3245f169ef5f43d3, id: 2, name: 'rita' } ]document deleted

利用高級異步特性

使用Await/Async特性,可以有效的減少代碼中的回調(diào)地獄現(xiàn)象。同樣的功能,可以使用這樣的代碼:

const MongoClient = require('mongodb').MongoClient;const connectionString = 'mongodb://localhost:27017';(async () => { const client = await MongoClient.connect(connectionString,  { useNewUrlParser: true }); const dbo = client.db('todos'); try {  var res = await dbo.collection('todo').insertMany(  [{id:1,name:"reco"}, {id:2,name:"rita"}]);  console.log("Number of documents inserted: " + res.insertedCount);  var r = await dbo.collection("todo").find().toArray()  console.log(r);  var myquery = { id: 1 }; var r = await dbo.collection("todo").deleteMany(myquery) console.log("document deleted"); } finally {  client.close(); }})().catch(err => console.error(err));

執(zhí)行此代碼,輸出如下:

Number of documents inserted: 2
[ { _id: 5b72ae8a1c674a6ac1c5aa6e, id: 1, name: 'reco' },
  { _id: 5b72ae8a1c674a6ac1c5aa6f, id: 2, name: 'rita' } ]
document deleted

總結(jié):

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临沧市| 连城县| 萨迦县| 壤塘县| 根河市| 阳山县| 云安县| 定日县| 辽源市| 大关县| 四平市| 朝阳区| 延吉市| 九龙城区| 松潘县| 凯里市| 渝中区| 平武县| 遵义市| 浠水县| 吉水县| 屏南县| 弥勒县| 稷山县| 定结县| 游戏| 南宁市| 威信县| 土默特左旗| 安远县| 龙里县| 辉南县| 方正县| 澜沧| 呼伦贝尔市| 宜兰县| 马鞍山市| 延寿县| 慈溪市| 阳东县| 英山县|