Node:操作MongoDB工具

前面

写在最前面,最近刚接触NodeJS.发现确实好用,然后又接着连接到MongoDB写了个小程序,程序并未写完.暂不发布,但是其中用到的工具是可以发布的.当然工具也还有很多细节需要补充.

先贴代码,后面慢慢优化.

NodeJS图标
image-2409

代码


/*

NodeJS连接MongoDB.v 0.9.1

======================================
最新使用版本:
NodeJS:v5.3.0
MongoDB:v3.0.3
Node-MongoDB驱动:v2.1.4

需要使用:
NodeJS(官网:http://www.nodejs.org)
MongoDB(官网:http://www.mongodb.org)
Node-MongoDB驱动:使用:npm install mongodb 进行安装.
驱动文档:http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html

@update 2016.1.6
============================================

@version 0.9
1.将文件中的增删改查公布出去[待优化增加更多的方法.]
2.整理代码.
3.外部简单调用测试.
4.数据库、集合名称采用外部传入.

@version 0.9.1
1.完善部分函数调用(例如:单条/多条新增、统计一共多少条数据、聚合操作等).
2.修改新增函数,使其能同时适用于多条和单条.
3.为大部分函数新增options可选参数,并给出可选参数参考网址.

@author prd.
@version 0.1 2016.1.14
@version 0.9 2016.1.16
@version 0.9.1 2016.1.17

*/

//获取数据库驱动.
var mongodb = require("mongodb").MongoClient;

//数据库名称[外部传入]
var dbname = "";
//集合名称[外部传入]
var collectionsname = "";
/*
接收数据库名称、集合名称,任一为空将抛出异常.

@dbname 数据库名称
@collectionsname 集合名称
*/
var nodeMongo = function (dbname, collectionsname) {
if (dbname == null || dbname == "" || collectionsname == "" || collectionsname == null) {
throw("数据库、集合名称缺一不可.");
}
this.dbname = dbname;
this.collectionsname = collectionsname;
};

//数据库连接对象.
var dbobj = null;

//连接数据库,获取数据库连接实例.
var getDB = function (dbname, callback) {
//数据库连接地址test=数据库名称
var url = "mongodb://localhost:27017/" + dbname;
if (dbobj == null) {
mongodb.connect(url, function (err, db) {
console.log("数据库连接成功");
dbobj = db;
callback(db);
});
} else {
callback(dbobj);
}
};

/*
根据数据库集合名称,获取集合对象.

本函数将自动获取数据库实例.
*/
var getCollection = function (dbname, collectionsname, callback) {
//获得数据库实例
getDB(dbname, function (db) {
//获得指定集合,并返回.
callback(db.collection(collectionsname));
})
};

/*

关闭数据库连接.
*/
var closeConnection = function (db) {
if (db) {
console.log("关闭数据库连接成功!~");
dbobj = null;
db.close();
}
};

nodeMongo.prototype.ObjectID = require("mongodb").ObjectID;

/*
新增

@insertData 需要新增的数据
@options 可选参数:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#insertMany
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#insertOne
@callback 回调函数
*/
nodeMongo.prototype.insertDocuments = function (insertData, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
if (insertData instanceof Array) {
collections.insertMany(insertData, options,
function (err, result) {
console.log("成功新增数据.");
var reresult = result;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
} else {
collections.insertOne(insertData, options,
function (err, result) {
console.log("成功新增数据.");
var reresult = result;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
}
});
};

/*
批量处理数据
参考:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#bulkWrite

@operations 需要处理的数据-数组
@options 可选参数:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#bulkWrite
@callback 回调函数
*/
nodeMongo.prototype.bulkWriteDocuments = function (operations, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
if (operations instanceof Array) {
collections.bulkWrite(operations, options,
function (err, r) {
console.log("处理成功.");
var reresult = r;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
}
});
};

/*
查询不重复的数据

@key 需要查找的列.
@query 查询条件.
@options 可选参数:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#distinct
@callback 回调函数
*/
nodeMongo.prototype.distinctDocument = function (key, query, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
collections.distinct(key, query, options,
function (err, docs) {
console.log("查询成功.");
var reresult = docs;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
});
};

/*

更新一条

@oldData 数据库中需要更新的数据条件
@options 可选条件:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#updateOne
@newData 新数据
@callback 回调函数
*/
nodeMongo.prototype.updateDocumentOne = function (oldData, newData, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
//更新一条
collections.updateOne(oldData, newData, options,
function (err, result) {
console.log("数据更新成功!");
var reresult = result;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
});
};

/*

更新多条

@oldData 数据库中需要更新的数据条件
@newData 新数据
@options 可选参数:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#updateMany
@callback 回调函数
*/
nodeMongo.prototype.updateDocumentMany = function (oldData, newData, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
//更新多条
collections.updateMany(oldData, newData, options,
function (err, result) {
console.log("数据更新成功!");
var reresult = result;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
});
};

/*

删除

@deleteCondi 删除条件
@options 可选参数:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#deleteOne
@callback 回调函数
*/
nodeMongo.prototype.deleteDocumentOne = function (deleteCondi, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
collections.deleteOne(deleteCondi, options, function (err, result) {
console.log("数据删除成功!");
var reresult = result;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
});
};

/*

删除多条

@deleteCondi 删除条件
@options 可选参数:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#deleteMany
@callback 回调函数
*/
nodeMongo.prototype.deleteDocumentMany = function (deleteCondi, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
collections.deleteMany(deleteCondi, options, function (err, result) {
console.log("数据删除成功!");
var reresult = result;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
});
};

/*
查询

@query 查询条件
@callback 回调函数,
查询成功之后,数据将传递给回调函数
*/
nodeMongo.prototype.findDocuments = function (query, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
collections.find(query).toArray(function (err, docs) {
console.log("查询数据.");
var reresult = docs;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
});
};

/*
统计数量.

@query 统计条件
@options 可选参数:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#count
@callback 回调函数,统计结果通过此函数传递.
*/
nodeMongo.prototype.countDocuments = function (query, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
collections.count(query, options, function (count) {
console.log("统计数据.");
var reresult = count;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
});
};

/*
聚合查询文档.
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#aggregate

@pipeline 查询条件.
@options 可选参数:
http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#aggregate
@callback 回调函数,查询结果通过此函数传递.
*/
nodeMongo.prototype.aggregateDocuments = function (pipeline, options, callback) {
getCollection(this.dbname, this.collectionsname, function (collections) {
collections.aggregate(pipeline, options, function (err, result) {
console.log("统计数据.");
var reresult = result;
closeConnection(dbobj);//关闭连接.
callback(reresult);
});
});
};

//将此文件中的数据发布成一个扩展,供外部使用.
exports.nodeMongo = nodeMongo;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据