我正在编写一个脚本来修改数据库中的所有条目。这是开始全部记录的开始。
MongoClient = require('mongodb').MongoClient.connect("mongodb://localhost:27017/mydb", { useNewUrlParser: true } ),
(async () =>{
let client;
try {
client = await MongoClient;
let collection = client.db("booliscraper").collection("sold");
let docs = await collection.find();
docs.forEach((doc) => {
console.log(doc);
})
} catch(err) {
log(err)
}
})();
这很好,但是我想以某种方式关闭数据库连接。我尝试关闭它的次数超过了try / catch,但似乎在所有项目都通过之前关闭了连接。不明白为什么。
...
} catch(err) {
log(err)
}
client.close();
})();
答案 0 :(得分:2)
docs
是<Collection>.find()
的结果,是一个游标; <Cursor>.forEach()
是一个异步函数。
在遍历光标之前,有效地调用client.close()
的意思。
您可以将第二个回调传递给forEach,一旦用完光标,该回调将被执行:
MongoClient = require('mongodb').MongoClient.connect("mongodb://localhost:27017/mydb", { useNewUrlParser: true } ),
(async () =>{
let client;
try {
client = await MongoClient;
let collection = client.db("booliscraper").collection("sold");
let docs = await collection.find();
docs.forEach((doc) => {
console.log(doc);
}, () => {
//cursor is exhausted, close connection
client.close();
})
} catch(err) {
log(err)
}
})();
有关更多信息,请参见Node.js Mongo DB Driver API。
答案 1 :(得分:0)
您可以添加finally块并在那里关闭MongoDB连接
(async () => {
let client;
try {
client = await MongoClient;
let collection = client.db("booliscraper").collection("sold");
let docs = await collection.find();
await docs.forEach((doc) => {
console.log(doc);
})
} catch (err) {
log(err)
} finally {
client.close()
}})();
这里是参考文献 try...catch