1.数据库链接
最近在写爬虫程序进行抓包,使用mongodb数据库的过程中遇到数据库链接的问题。
因为习惯了以前使用mysql时关闭数据库链接的习惯,不太了解Mongodb如何操作数据库链接。
加上我使用的是mongooes这个NPM模块进行数据库操作。
官方的示例是使用
var M = require('mongoose');
M.connect('mongodb://admin:411411411@kahana.mongohq.com:10043/blog');
类似这样的代码段
但是例如当我在User.js 和Diary.js中都加人对应代码,就发现会报数据库链接错误。
查阅资料后,在stackoverflow发现,mogoooes对应一个数据库只要进行一次链接,对应多个数据库才需要进行多次链接
最终的解决方案是新建一个db.js,导出数据库链接,每次需要就require这个模块
var M = require('mongoose');
M.connect('mongodb://admin:411411411@kahana.mongohq.com:10043/blog');
// reference to the database connection 为这个连接创建一个引用
var db = M.connection;
// expose to modules that require database.js 把这个引用暴露给引用 database 模块的其他模块
module.exports = db;
2.批插入
mongodb有个批插入的功能,使用mongooes后也想实现,最后查阅文档总算成功了
这里附一个完整的Model
/**
* Created by Administrator on 14-8-8.
*/
var mongoose = require('mongoose');
var db = require('./db.js');
var gooditemSchema = new mongoose.Schema({
iid:String,
status: String,
date: String,
pv: String,
url : String,
name :String,
owner :String
}, {
collection: 'gooditems'
});
var GooditemModel = mongoose.model('Gooditem', gooditemSchema);
function Gooditem(gooditem) {
this.iid=gooditem.iid;
this.name = gooditem.name;
this.pv =gooditem.pv;
this.status = gooditem.status;
this.url = gooditem.url;
this.date = gooditem.date;
this.owner = gooditem.owner;
};
//保存
Gooditem.prototype.save = function(callback) {
var gooditem= {
iid:this.iid,
name:this.name,
pv :this.pv,
status : this.status,
url : this.url,
date : this.date,
owner : this.owner
};
var Model = new GooditemModel(gooditem);
Model.save(function (err, gooditem) {
if (err) {
return callback(err);
}
callback(null, gooditem);
});
};
//查
Gooditem.get = function(iid, callback) {
gooditemModel.findOne({iid: iid}, function (err, gooditem) {
if (err) {
return callback(err);
}
callback(null, gooditem);
});
};
//改
Gooditem.update = function(iid,img,callback){
var conditions = {iid : iid};
var update = {$set : {img: img}};
var options = {upsert : true};
gooditemModel.update(conditions, update, options, function(error,data){
if(error) {
console.log(error);
} else {
callback( 'update ok!');
}
});
}
//批插入
Gooditem.batch = function(array,callback){
GooditemModel.create(array,function(err){
if(err){
callback('error')
}
else{
callback("ok")
}
})
}
module.exports = Gooditem;