我有一个使用mongodb本机驱动程序的node.js应用程序.
在使用节点v8.9.1将我的应用程序代码迁移到async / await的过程中,我正在努力为mongodb查询找到一种优雅的方式.
mongodb驱动程序的主要问题是,所有查询都使用回调,其中promises函数对于异步方法是必需的.
备择方案:
> mongoose-promises查询已被弃用,它强制使用Schema模型,这对我的应用程序来说有点开销.
> mongoist-据称很棒,因为它建立时考虑到async / await并完全承诺,但是与mongodb的SSL连接和糟糕的文档错误 – 让我远离这个解决方案.
我成功实现的唯一解决方法是使用callback-promise npm包将mongodb驱动程序API转换为完全承诺.
优雅的高性能方式有什么新鲜的想法吗?
解决方法:
由于所有答案都缺少一些位(catch块,检查客户端是否为null),我自带了解决方案.使用Mongo服务器v4.0.7和Node JS驱动程序3.2.2进行测试.
请注意,该示例是一个控制台程序,我们在finally块中关闭与服务器的连接.在Web应用程序中,重用连接.
请参阅Node Mongo docs.此外,使用Winston或Morgan等库记录错误,而不记录控制台.
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();