您好,登錄后才能下訂單哦!
在聽陳鴻宇的《理想三旬》。好聽~
上兩篇博文中提到了在Mac下Mongodb的安裝與連接,這次我們來看看如何通過Node操作Mongodb。
PS:本文中的數(shù)據(jù)集合采用上篇博文中'test'庫中的"mycollection"。
一:安裝MongoDB包
使用Node中的mongodb模塊,需要先安裝哦~打開終端,輸入如下命令~
npm install mongodb |
二:數(shù)據(jù)庫連接與斷開
1:引入mongodb模塊
var mongo = require("mongodb"); |
2:創(chuàng)建MongoDB數(shù)據(jù)庫的服務(wù)器對(duì)象
var server = new mongo.Server(host,port,[options]); |
說明:host:服務(wù)器所在地址,默認(rèn)本地localhost;port:服務(wù)器端口號(hào),默認(rèn)27017;options:可選配置參數(shù)。
3:創(chuàng)建MongoDB的db對(duì)象
var db = new mongo.Db(databasename,server,[options]); |
說明:databasename:數(shù)據(jù)庫名,這里我們使用上篇的“test”數(shù)據(jù)庫;server:服務(wù)器對(duì)象;options:可選配置參數(shù)。
4:執(zhí)行db的open方法,連接數(shù)據(jù)庫
db.open(callback(err,db)); |
說明:callback回調(diào)方法,如果連接失敗,將拋出err錯(cuò)誤,連接數(shù)據(jù)庫成功,會(huì)返回db對(duì)象。
5:執(zhí)行db的close方法,斷開數(shù)據(jù)庫連接
db.close(); |
說明:關(guān)閉數(shù)據(jù)庫連接時(shí),將會(huì)觸發(fā)監(jiān)聽的close事件,該事件有err和db兩參數(shù),意義同上。
function(err,db){ //回調(diào)方法 } |
附:代碼片段。將下述代碼保存在testMongo.js文件中。
var mongo = require("mongodb"); var host = "localhost"; var port = "27017"; var server = new mongo.Server(host,port,{auto_reconnect:true}); var db = new mongo.Db("test",server,{safe:true}); db.open(function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("成功建立數(shù)據(jù)庫連接"); db.close(); } }); db.on("close",function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("關(guān)閉數(shù)據(jù)庫連接") } }) |
新開終端,輸入"mongod"打開mongodb。
新開終端,輸入"node testMongo.js",看到如下結(jié)果,就成功啦。
testNode node testMongo.js 成功建立數(shù)據(jù)庫連接 關(guān)閉數(shù)據(jù)庫連接 |
三:數(shù)據(jù)集合
MongoDb操作的是數(shù)據(jù)集合?。?!數(shù)據(jù)的操作就是數(shù)據(jù)集合的操作。
db.collection(collectionname,[options],callback(err,collection)); |
說明:collectionname:數(shù)據(jù)庫中數(shù)據(jù)集合名字,此處是上節(jié)的"mycollection";options:可選配置參數(shù)。callback:連接的回調(diào)方法,會(huì)有連接出錯(cuò)的err參數(shù)和連接成功的collecction參數(shù)。
附:代碼片段。保存下述文件到testMongo.js中。
var mongo = require("mongodb"); var host = "localhost"; var port = "27017"; var server = new mongo.Server(host,port,{auto_reconnect:true}); var db = new mongo.Db("test",server,{safe:true}); db.open(function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("成功建立數(shù)據(jù)庫連接"); db.collection('mycollection',function(err,collection){ if(err){ throw err; console.log("連接數(shù)據(jù)集合出錯(cuò)"); }else{ console.log("成功連接數(shù)據(jù)集合"); db.close(); } }); } }); db.on("close",function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("關(guān)閉數(shù)據(jù)庫連接") } }) |
新開終端,輸入"node testMongo.js",看到如下結(jié)果,就成功啦。
testNode node testMongo.js 成功建立數(shù)據(jù)庫連接 成功連接數(shù)據(jù)集合 關(guān)閉數(shù)據(jù)庫連接 |
四:MongoDb-增
數(shù)據(jù)集合的insert方法,實(shí)現(xiàn)添加數(shù)據(jù)的操作。
collection.insert(docs,[options],[callback(err,docs)]) |
說明:docs:要插入的數(shù)據(jù);options:可選配置參數(shù)。可選callback:插入的回調(diào)方法,插入出錯(cuò)的err參數(shù)和插入成功時(shí)的docs(插入的數(shù)據(jù))參數(shù)。
附:代碼片段。保存下述文件到testMongo.js中。--在test庫的mycollection數(shù)據(jù)集合中插入5條Cailala
var mongo = require("mongodb"); var host = "localhost"; var port = "27017"; var server = new mongo.Server(host,port,{auto_reconnect:true}); var db = new mongo.Db("test",server,{safe:true}); db.open(function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("成功建立數(shù)據(jù)庫連接"); db.collection('mycollection',function(err,collection){ if(err){ throw err; console.log("連接數(shù)據(jù)集合出錯(cuò)"); }else{ console.log("成功連接數(shù)據(jù)集合"); //insert for(var i = 1;i<6;i++){ collection.insert({'name':'Cailala'+i},function(err,docs){ console.log(docs); db.close(); }); } } }); } }); db.on("close",function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("關(guān)閉數(shù)據(jù)庫連接") } }) |
新開終端,輸入"node testMongo.js",看到如下結(jié)果,就成功啦。
testNode node testMongo.js 成功建立數(shù)據(jù)庫連接 成功連接數(shù)據(jù)集合 { result: { ok: 1, n: 1 }, ops: [ { name: 'Cailala1', _id: 57a1fb5292764dbc5736dcd9 } ], insertedCount: 1, insertedIds: [ 57a1fb5292764dbc5736dcd9 ] } 關(guān)閉數(shù)據(jù)庫連接 { result: { ok: 1, n: 1 }, ops: [ { name: 'Cailala2', _id: 57a1fb5292764dbc5736dcda } ], insertedCount: 1, insertedIds: [ 57a1fb5292764dbc5736dcda ] } { result: { ok: 1, n: 1 }, ops: [ { name: 'Cailala3', _id: 57a1fb5292764dbc5736dcdb } ], insertedCount: 1, insertedIds: [ 57a1fb5292764dbc5736dcdb ] } { result: { ok: 1, n: 1 }, ops: [ { name: 'Cailala4', _id: 57a1fb5292764dbc5736dcdc } ], insertedCount: 1, insertedIds: [ 57a1fb5292764dbc5736dcdc ] } { result: { ok: 1, n: 1 }, ops: [ { name: 'Cailala5', _id: 57a1fb5292764dbc5736dcdd } ], insertedCount: 1, insertedIds: [ 57a1fb5292764dbc5736dcdd ] } |
五:MongoDb-查
數(shù)據(jù)集合的find方法,實(shí)現(xiàn)查詢數(shù)據(jù)的操作。
collection.find(selector,[options]).toArray(callback(err,docs)) |
說明:selector:查詢條件;options:可選配置參數(shù)。find方法返回的是Cursor游標(biāo)對(duì)象,該對(duì)象的toArray方法將返回查詢到的所有數(shù)據(jù)文檔,參數(shù)callback:查詢的回調(diào)方法,查詢出錯(cuò)的err參數(shù)和查詢成功時(shí)的docs(查詢出的數(shù)據(jù))參數(shù)。
附:代碼片段。保存下述文件到testMongo.js中。--查詢數(shù)據(jù)集合中name是Cailala1的數(shù)據(jù)
var mongo = require("mongodb"); var host = "localhost"; var port = "27017"; var server = new mongo.Server(host,port,{auto_reconnect:true}); var db = new mongo.Db("test",server,{safe:true}); db.open(function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("成功建立數(shù)據(jù)庫連接"); db.collection('mycollection',function(err,collection){ if(err){ throw err; console.log("連接數(shù)據(jù)集合出錯(cuò)"); }else{ console.log("成功連接數(shù)據(jù)集合"); //find collection.find({name:"Cailala1"},{fields:{name:1,_id:0}}).toArray(function(err,docs){ if(err) throw err; else console.log(docs); db.close(); }); } }); } }); db.on("close",function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("關(guān)閉數(shù)據(jù)庫連接") } }) |
新開終端,輸入"node testMongo.js",看到如下結(jié)果,就成功啦。
testNode node testMongo.js 成功建立數(shù)據(jù)庫連接 成功連接數(shù)據(jù)集合 [ { name: 'Cailala1' } ] 關(guān)閉數(shù)據(jù)庫連接 |
六:MongoDb-改
數(shù)據(jù)集合的update方法,實(shí)現(xiàn)修改數(shù)據(jù)的操作。
collection.update(selector,documents,[optios],[callback(err,resu)]) |
說明:selector:需要更新的數(shù)據(jù)文檔;documents:用于更新的文檔;options:可選配置參數(shù);可選callback:修改的回調(diào)方法,修改出錯(cuò)的err參數(shù)和修改成功時(shí)的result(成功修改的數(shù)據(jù)條數(shù))參數(shù)。
附:代碼片段。保存下述文件到testMongo.js中。--修改name是Cailala1為liujinhuan,并查詢輸出。
var mongo = require("mongodb"); var host = "localhost"; var port = "27017"; var server = new mongo.Server(host,port,{auto_reconnect:true}); var db = new mongo.Db("test",server,{safe:true}); db.open(function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("成功建立數(shù)據(jù)庫連接"); db.collection('mycollection',function(err,collection){ if(err){ throw err; console.log("連接數(shù)據(jù)集合出錯(cuò)"); }else{ console.log("成功連接數(shù)據(jù)集合"); // update collection.update({name:"Cailala1"},{name:"liujinhuan"},function(err,res){ if(err){ throw err; }else{ console.log("成功更新 "+JSON.parse(res).n+" 條數(shù)據(jù)"); collection.find({},{fields:{name:1,_id:0}}).toArray(function(err,docs){ if(err) throw err; else console.log(docs); db.close(); }); } }); } }); } }); db.on("close",function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("關(guān)閉數(shù)據(jù)庫連接") } }) |
新開終端,輸入"node testMongo.js",看到如下結(jié)果,就成功啦。
testNode node testMongo.js 成功建立數(shù)據(jù)庫連接 成功連接數(shù)據(jù)集合 成功更新 1 條數(shù)據(jù) [ { name: 'liujinhuan' }, { name: 'Cailala2' }, { name: 'Cailala3' }, { name: 'Cailala4' }, { name: 'Cailala5' } ] 關(guān)閉數(shù)據(jù)庫連接 |
七:MongoDb-刪
數(shù)據(jù)集合的remove方法,實(shí)現(xiàn)刪除數(shù)據(jù)的操作。
collection.remove([selector],[options],[callback]) |
說明:可選selector:刪除的條件,不指定則刪除全部;可選options:配置參數(shù);可選callback:刪除的回調(diào)方法,刪除出錯(cuò)的err參數(shù)和刪除成功時(shí)的result(成功修改的數(shù)據(jù)條數(shù))參數(shù)。
附:代碼片段。保存下述文件到testMongo.js中。
var mongo = require("mongodb"); var host = "localhost"; var port = "27017"; var server = new mongo.Server(host,port,{auto_reconnect:true}); var db = new mongo.Db("test",server,{safe:true}); db.open(function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("成功建立數(shù)據(jù)庫連接"); db.collection('mycollection',function(err,collection){ if(err){ throw err; console.log("連接數(shù)據(jù)集合出錯(cuò)"); }else{ console.log("成功連接數(shù)據(jù)集合"); //remove collection.remove({name:"liujinhuan"},function(err,res){ if(err){ throw err; }else{ console.log("成功刪除 "+JSON.parse(res).n+" 條數(shù)據(jù)"); collection.find({},{fields:{name:1,_id:0}}).toArray(function(err,docs){ if(err) throw err; else console.log(docs); db.close(); }); } }); } }); } }); db.on("close",function(err,db){ if(err){ throw err; console.log("連接數(shù)據(jù)庫出錯(cuò)"); }else{ console.log("關(guān)閉數(shù)據(jù)庫連接") } }) |
新開終端,輸入"node testMongo.js",看到如下結(jié)果,就成功啦。
testNode node testMongo.js 成功建立數(shù)據(jù)庫連接 成功連接數(shù)據(jù)集合 成功刪除 1 條數(shù)據(jù) [ { name: 'Cailala2' }, { name: 'Cailala3' }, { name: 'Cailala4' }, { name: 'Cailala5' } ] 關(guān)閉數(shù)據(jù)庫連接 |
以上就是總結(jié)的Node操作的Mongodb。其中的options都是一些可以配置的參數(shù)~這里只是基礎(chǔ)的用法啦~歡迎吐槽
Mac不能上傳結(jié)果的截圖~又不能上傳實(shí)例代碼~好尷尬呀~
聽不懂《理想三旬》。但還是在聽~直到聽吐為止吧~
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。