我有一个使用mongodb本机驱动程序的node.js应用程序。在使用节点v8.9.1将应用程序代码迁移到异步/等待的过程中,我努力寻找一种适合mongodb查询的好方法。mongodb驱动程序的主要问题是,所有查询都使用回调,其中对异步方法来说,promise函数是必需的。
备择方案:
我成功以一种优雅的方式成功实现的唯一解决方法是,使用 回调承诺 npm包将mongodb驱动程序API转换为完全承诺。
关于优雅的高性能方式的任何新想法?
由于所有答案都缺少一些内容(捕获块,请检查客户端是否不是null),因此我提供了自己的解决方案。已在Mongo服务器v4.0.7和Node JS驱动程序3.2.2中进行了测试。
null
注意,该示例是一个控制台程序,在该程序段中,我们关闭了与服务器的连接finally。在Web应用程序中,连接被重用。请参阅Node Mongo docs。另外,错误是使用Winston或Morgan等库记录的,而不是控制台记录的。
finally
const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://localhost:27017'; async function findOne() { const client = await MongoClient.connect(url, { useNewUrlParser: true }) .catch(err => { console.log(err); }); if (!client) { return; } try { const db = client.db("testdb"); let collection = db.collection('cars'); let query = { name: 'Volkswagen' } let res = await collection.findOne(query); console.log(res); } catch (err) { console.log(err); } finally { client.close(); } } findOne();