Node.js操作Mongodb(1)

今天想要分享是使用node.js来连接并操作mongodb数据库实现基本的增删查改操作。

首先我们需要在node.js下安装mongodb争对node的驱动。

npm install mongodb

下面就可以开始写代码了。首先当然是在node代码引用mongodb:

var mongodb = require("mongodb");

其次就是连接到mongodb数据库server:

var server = new mongodb.Server('localhost',27017,{auto_reconnect:true});

其中第一、二分参数分别是IP地址和端口,由于我们这里没有设计到验证,因此便不需要验证参数。最后的参数是一个对象,我们设置了一个属性auto_reconnect为true,就表示如果当程序与mongodb失去连接便回自动重连。

var server = new mongodb.Server('localhost',27017,{auto_reconnect:true},10);

通常情况下我们可以不管最后一个参数,这个参数是线程池的数量,系统默认的设置是5,也就是说可以同时支持打开5个数据库连接,并进行操作。当然我们可以根据自己需要设置希望的值。

然后就是获取或者创建一个DB实例。

var db = new mongodb.Db("mydb2",server);

第一个参数需要传入被数据库的名称,如果数据库不存在系统会创建该数据库,当时不是现在,而是当我们试图打开数据库的时候。

db.open(function(err,db){
if(err){
console.log(err);
}
if(!err){
console.log("we are connected!");
}
});

我们想要对数据库进行的相关操作都是在db.open()的回调函数内完成的。即是说我们对数据库的操作需要在数据库被打开的情况下完成。
在mongodb中collection可以看做是我们平时所用的关系型数据库中的table(表),我们可以通过显式或者隐式的方式来创建collection:
显式即是使用db.createCollection()创建。

db.createCollection('test',{safe:true},function(err,collection){
if(err){
console.log(err);
}else{
console.log("created successful!");
}
 });

safe:true如果我们使用了这个参数即表示,如果当我们想要创建的collection已经存在时,则会报错,如果去掉则不会。
隐式则是我们在使用某个collection的时候,系统发现没有该collection,则会自动创建。

db.collection('fuck',function(err,collection){
});

这个时候如果我们使用safe:true,当程序发现我们希望使用的collection不存在则会报错。通过这段代码,我们可以在该回调函数中执行所有我们对该collection的操作。

插入数据:

//插入单条数据
collection.insert({'name':'tom'},function(err,result){});
//插入数组
var array = [{'name':'mary'},{'name':'lily','age':20}];
collection.insert(array,{safe:true},function(err,result){
     if(err) throw err;
});

当我们一次插入或者在以后的删除、更新多条数据时,我们都应该使用safe:true,以保证数据的完整性和一致性,如果在插入数组的过程中某些数据未能成功插入,即会报错。
更新数据:

collection.update({'name':'tom'},{$set:{'name':'lily','age':100}},function(err,result){
if(err) throw err;
if(!err){
console.log("update successful");
}
 });

第一个参数为我们定位目标的属性,这里即是我们更新所有名字为tom的数据,$set的意思则是我们将其更换其他的数据。
删除数据:

//删除用户名为tom的数据
collection.remove({'name':'tom'},{safe:true},function(err,result){
if(err) console.log(err);

});

//删除集合内的所有数据

collection.remove();

查找数据:

//查找一条符合的数据
collection.findOne({'name':'tom'},function(err,result){
if (err) throw err;
console.log(result);
 });

//查找多条数据,将结果集转换成数组。

collection.find().toArray(function(err,items){
if(err) throw err;

//遍历数据

for(item in array){
 console.log(array[item]);
 }
 });

//另外一种查找多条数据的方式是使用流式来处理。

var stream = collection.find().streamRecords();

//监听获取数据
 stream.on("data",function(item){
 console.log(item);
 });

//当数据读取完毕时,执行的方法。
 stream.on("end",function(){
 console.log("stream is end");
 });

当然我们这里使用的查找数据的方式很简单,没有涉及到高级的查询语句,比如限制返回数据的条数limit(),这些都是可以使用的。大家可以从下面的文档中获取到更多的信息。

完整代码下载:

https://github.com/wahyd4/node.js-mongodb-demo
参考文档:
http://mongodb.github.com/node-mongodb-native/api-articles/nodekoarticle1.html
http://www.mongodb.org/display/DOCS/Advanced+Queries

请阅读下一篇:

Node.js操作mongodb(2)——gridfs操作文件