溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Node與Mongodb實(shí)戰(zhàn)

發(fā)布時(shí)間:2020-06-07 02:36:52 來源:網(wǎng)絡(luò) 閱讀:698 作者:Cindere_liuqiqi 欄目:數(shù)據(jù)庫

在聽陳鴻宇的《理想三旬》。好聽~


上兩篇博文中提到了在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í)例代碼~好尷尬呀~


聽不懂《理想三旬》。但還是在聽~直到聽吐為止吧~

向AI問一下細(xì)節(jié)

免責(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)容。

AI