Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环内的mongodb insertOne_Mongodb_Loops_Insert - Fatal编程技术网

循环内的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
    }
}

另一个选择——虽然不是个好主意 同步时运行Make
insertflowers