0
我正在使用mongodb和nodejs。我的MongoDB程序具有以下代码nodejs中的MongoDB连接字符串
在mongodbUtil.js:
var MongoClient = require('mongodb').MongoClient
var state = {
db: null,
}
exports.connect = function(url, done) {
if (state.db) return done()
MongoClient.connect(url, function(err, db) {
if (err) return done(err)
state.db = db
done()
})
}
exports.get = function() {
return state.db
}
/* 1 : when is close called */
exports.close = function(done) {
if (state.db) {
state.db.close(function(err, result) {
state.db = null
state.mode = null
done(err)
})
}
}
在app.js我有以下代码
var async = require("async");
var express = require("express");
var app = express();
var db = require("./mongodbUtil");
db.connect('mongodb://localhost:27017/mydatabase', function(err) {
if (err) {
console.log('Unable to connect to Mongo.')
process.exit(1)
} else {
app.listen(3000, function() {
console.log('Listening on port 3000...')
})
}
})
app.get('/',function(req,res){
res.send("routes :/insert ")
})
app.get('/insert',function(req,res){
var collection = db.get().collection('insertcollection');
collection.drop();
var obj = {};
for (i=0; i <100000 ; i++){
obj=({id: i, square:i*i,sum:i+i,subtract:i-1,data:"data part 2014"});
collection.insert(obj.table, function (err, result) {
if(err) {
console.log(err);
} else {
console.log(i);
}
});
}
})
我在这个以下代码查询
- 什么时候应该关闭mongodb中的连接?这是由nodejs mongodb驱动程序隐式处理还是仅在此场景中创建连接 池?
- 我应该使用读取首选项和写入首选项设置连接字符串还是应该将其保留为默认值?
- 在插入路由中,只有约60000条记录被插入集合中。我在mongodb插入回调中也没有看到任何错误。为什么只有部分数据被转储是否有特定的原因? (我知道批量插入的性能更好,但我很好奇为什么没有错误报告,只有部分数据被丢弃)
所以如果我有一个高流量的要求,使用连接池,这是否意味着我不需要的NodeJS应用程序的生命周期内,收于任意点的连接。 – baiduXiu
我不会建议关闭连接,但我会建议您打开连接的方式,确保存在打开的连接,如果不重新打开一个或多个连接并将其添加到池中。 –
如果在nodejs应用程序的生命周期中打开的连接失败,那么重新生成mongodb连接的最佳方式是什么。同样,如果/ insert路由的代码是同步的,为什么它能够转储60k记录并且不会在错误回调 – baiduXiu