Node與Mongodb實戰

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


上兩篇博文中提到了在Mac下Mongodb的安裝與鏈接,此次咱們來看看如何經過Node操做Mongodb。ios


PS:本文中的數據集合採用上篇博文中'test'庫中的"mycollection"。
mongodb


一:安裝MongoDB包數據庫

使用Node中的mongodb模塊,須要先安裝哦~打開終端,輸入以下命令~npm

npm install mongodb

二:數據庫鏈接與斷開服務器

1:引入mongodb模塊ide

var mongo = require("mongodb");

2:建立MongoDB數據庫的服務器對象ui

var server = new mongo.Server(host,port,[options]);

說明:host:服務器所在地址,默認本地localhost;port:服務器端口號,默認27017;options:可選配置參數。spa

3:建立MongoDB的db對象server

var db = new mongo.Db(databasename,server,[options]);

說明:databasename:數據庫名,這裏咱們使用上篇的「test」數據庫;server:服務器對象;options:可選配置參數。

4:執行db的open方法,鏈接數據庫

db.open(callback(err,db));

說明:callback回調方法,若是鏈接失敗,將拋出err錯誤,鏈接數據庫成功,會返回db對象。

5:執行db的close方法,斷開數據庫鏈接

db.close();

說明:關閉數據庫鏈接時,將會觸發監聽的close事件,該事件有err和db兩參數,意義同上。

function(err,db){

    //回調方法

}

附:代碼片斷。將下述代碼保存在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("鏈接數據庫出錯");

}else{

console.log("成功創建數據庫鏈接");

db.close();

}

});


db.on("close",function(err,db){

if(err){

throw err;

console.log("鏈接數據庫出錯");

}else{

console.log("關閉數據庫鏈接")

}

})

新開終端,輸入"mongod"打開mongodb。

新開終端,輸入"node testMongo.js",看到以下結果,就成功啦。

 testNode  node testMongo.js

成功創建數據庫鏈接

關閉數據庫鏈接

三:數據集合

MongoDb操做的是數據集合!!!數據的操做就是數據集合的操做。

db.collection(collectionname,[options],callback(err,collection));

說明:collectionname:數據庫中數據集合名字,此處是上節的"mycollection";options:可選配置參數。callback:鏈接的回調方法,會有鏈接出錯的err參數和鏈接成功的collecction參數。

附:代碼片斷。保存下述文件到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("鏈接數據庫出錯");

}else{

console.log("成功創建數據庫鏈接");

db.collection('mycollection',function(err,collection){

if(err){

throw err;

console.log("鏈接數據集合出錯");

}else{

console.log("成功鏈接數據集合");

db.close();

}

});

}

});


db.on("close",function(err,db){

if(err){

throw err;

console.log("鏈接數據庫出錯");

}else{

console.log("關閉數據庫鏈接")

}

})

新開終端,輸入"node testMongo.js",看到以下結果,就成功啦。

 testNode  node testMongo.js

成功創建數據庫鏈接

成功鏈接數據集合

關閉數據庫鏈接

四:MongoDb-增

數據集合的insert方法,實現添加數據的操做。

collection.insert(docs,[options],[callback(err,docs)])

說明:docs:要插入的數據;options:可選配置參數。可選callback:插入的回調方法,插入出錯的err參數和插入成功時的docs(插入的數據)參數。

附:代碼片斷。保存下述文件到testMongo.js中。--在test庫的mycollection數據集合中插入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("鏈接數據庫出錯");

}else{

console.log("成功創建數據庫鏈接");

db.collection('mycollection',function(err,collection){

if(err){

throw err;

console.log("鏈接數據集合出錯");

}else{

console.log("成功鏈接數據集合");

//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("鏈接數據庫出錯");

}else{

console.log("關閉數據庫鏈接")

}

})

新開終端,輸入"node testMongo.js",看到以下結果,就成功啦。

 testNode  node testMongo.js

成功創建數據庫鏈接

成功鏈接數據集合

{ result: { ok: 1, n: 1 },

  ops: [ { name: 'Cailala1', _id: 57a1fb5292764dbc5736dcd9 } ],

  insertedCount: 1,

  insertedIds: [ 57a1fb5292764dbc5736dcd9 ] }

關閉數據庫鏈接

{ 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-查

數據集合的find方法,實現查詢數據的操做。

collection.find(selector,[options]).toArray(callback(err,docs))

說明:selector:查詢條件;options:可選配置參數。find方法返回的是Cursor遊標對象,該對象的toArray方法將返回查詢到的全部數據文檔,參數callback:查詢的回調方法,查詢出錯的err參數和查詢成功時的docs(查詢出的數據)參數。

附:代碼片斷。保存下述文件到testMongo.js中。--查詢數據集合中name是Cailala1的數據

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("鏈接數據庫出錯");

}else{

console.log("成功創建數據庫鏈接");

db.collection('mycollection',function(err,collection){

if(err){

throw err;

console.log("鏈接數據集合出錯");

}else{

console.log("成功鏈接數據集合");

//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("鏈接數據庫出錯");

}else{

console.log("關閉數據庫鏈接")

}

})

新開終端,輸入"node testMongo.js",看到以下結果,就成功啦。

 testNode  node testMongo.js

成功創建數據庫鏈接

成功鏈接數據集合

[ { name: 'Cailala1' } ]

關閉數據庫鏈接

六:MongoDb-改

數據集合的update方法,實現修改數據的操做。

collection.update(selector,documents,[optios],[callback(err,resu)])

說明:selector:須要更新的數據文檔;documents:用於更新的文檔;options:可選配置參數;可選callback:修改的回調方法,修改出錯的err參數和修改爲功時的result(成功修改的數據條數)參數。

附:代碼片斷。保存下述文件到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("鏈接數據庫出錯");

}else{

console.log("成功創建數據庫鏈接");

db.collection('mycollection',function(err,collection){

if(err){

throw err;

console.log("鏈接數據集合出錯");

}else{

console.log("成功鏈接數據集合");

// update

collection.update({name:"Cailala1"},{name:"liujinhuan"},function(err,res){

if(err){

throw err;

}else{

console.log("成功更新 "+JSON.parse(res).n+"  條數據");

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("鏈接數據庫出錯");

}else{

console.log("關閉數據庫鏈接")

}

})

新開終端,輸入"node testMongo.js",看到以下結果,就成功啦。

 testNode  node testMongo.js

成功創建數據庫鏈接

成功鏈接數據集合

成功更新 1  條數據

[ { name: 'liujinhuan' },

  { name: 'Cailala2' },

  { name: 'Cailala3' },

  { name: 'Cailala4' },

  { name: 'Cailala5' } ]

關閉數據庫鏈接

七:MongoDb-刪

數據集合的remove方法,實現刪除數據的操做。

collection.remove([selector],[options],[callback])

說明:可選selector:刪除的條件,不指定則刪除所有;可選options:配置參數;可選callback:刪除的回調方法,刪除出錯的err參數和刪除成功時的result(成功修改的數據條數)參數。

附:代碼片斷。保存下述文件到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("鏈接數據庫出錯");

}else{

console.log("成功創建數據庫鏈接");

db.collection('mycollection',function(err,collection){

if(err){

throw err;

console.log("鏈接數據集合出錯");

}else{

console.log("成功鏈接數據集合");

//remove

collection.remove({name:"liujinhuan"},function(err,res){

if(err){

throw err;

}else{

console.log("成功刪除 "+JSON.parse(res).n+"  條數據");

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("鏈接數據庫出錯");

}else{

console.log("關閉數據庫鏈接")

}

})

新開終端,輸入"node testMongo.js",看到以下結果,就成功啦。

 testNode  node testMongo.js

成功創建數據庫鏈接

成功鏈接數據集合

成功刪除 1  條數據

[ { name: 'Cailala2' },

  { name: 'Cailala3' },

  { name: 'Cailala4' },

  { name: 'Cailala5' } ]

關閉數據庫鏈接



以上就是總結的Node操做的Mongodb。其中的options都是一些能夠配置的參數~這裏只是基礎的用法啦~歡迎吐槽


Mac不能上傳結果的截圖~又不能上傳實例代碼~好尷尬呀~


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

相關文章
相關標籤/搜索