循环内的mongodb insertOne
我想在循环中插入不同的集合。 我已经写了这篇文章,而且它曾经有效过循环内的mongodb insertOne,mongodb,loops,insert,Mongodb,Loops,Insert,我想在循环中插入不同的集合。 我已经写了这篇文章,而且它曾经有效过 const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true }); let insertflowers = async (collectionname,query) => { try { await client.connect(); const data
const client = new MongoClient(uri, {
useNewUrlParser: true,
useUnifiedTopology: true
});
let insertflowers = async (collectionname,query) => {
try {
await client.connect();
const database = client.db('flowers');
const collection = database.collection(collectionname);
return await collection.insertOne(query);
} finally {
await client.close();
}
}
insertflowers('alocasias',{name:'...'}).catch(console.dir);
我想做的是把它放在这样一个循环中
arrayofflowers.forEach( val => {
let flowerType = ...
insertflowers(flowerType,{name:'...'}).catch(console.dir);
});
但是我得到了以下错误
MongoError:拓扑已关闭,请连接
感谢您阅读简而言之,删除
等待客户端。关闭()代码>
选中可立即插入批量记录
您处于竞争状态,所以当insertflowers进程并行运行时,连接是关闭和打开的
所以,当您尝试插入数据时,另一个对insertflowers的调用会关闭连接
const client = new MongoClient(uri, {
useNewUrlParser: true,
useUnifiedTopology: true
});
let connection;
const connect = async () => {
if (!connection) { // return connection if already connected
connection = await client.connect();
}
return connection;
});
let insertflowers = async (collectionname,query) => {
try {
const conn = await connect();
const database = conn.db('flowers');
const collection = database.collection(collectionname);
return await collection.insertOne(query);
} finally {
console.log('insertflowers completed');
// await client.close(); remove this
}
}
另一个选择——虽然不是个好主意
同步时运行Makeinsertflowers