我正在使用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);
}
});
}
})
我在此代码中有以下查询
答案 0 :(得分:0)
您有多种选择,您可以为每个请求创建新连接或拥有一个连接池,或者如果您没有像过去那样拥有高流量,则一个连接就可以了。
对于结束部分,如果您在请求中关闭它,如果再次请求该路由,则会出错。让nodejs mongodb驱动程序处理它。
对于部分数据,您正在执行同步循环以执行异步调用。将您的代码更改为:
const promises = [];
for (i=0; i <100000 ; i++){
promises.push(
new Promise((resolve, reject) => {
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);
return reject(err);
}
console.log(i);
return resolve(i);
});
})
);
}
Promise.all(promises)
.then((result) => {
// if no error in calls
console.log(reslt);
})
.catch((error) => {
// if error in calls
});
但是,如果您使用的是本机mongodb驱动程序,则可以使用col.insertMany()
,它基本上是一个对象表。这样:
const objs = [];
for (i=0; i <100000 ; i++){
objs.push({id: i, square:i*i,sum:i+i,subtract:i-1,data:"data part 2014"});
}
col.insertMany(
objs,
function(err, result) {
if (err) {
console.error(err);
return;
}
console.log(result);
}
);
希望这有帮助