我有一个使用mongodb本机驱动程序的Node.js应用程序。在使用NodeV8.9.1将我的应用程序代码迁移到Async/Await的过程中,我正在努力为mongodb查询找到一种优雅的方法。mongodb驱动程序的主要问题是,所有查询都使用回调,其中承诺函数对于异步方法是必需的。
备选方案:
我成功以优雅的方式实现的唯一变通方法是使用回调-承诺npm包将mongodb驱动程序API转换为完全承诺。
对于优雅的高性能方式有什么新鲜的想法吗?
由于所有答案都缺少一些位(catch块,检查客户机不是
注意,该示例是一个控制台程序,其中我们在
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();
编辑:'mongodb'v3.x
根据mongoDB ES6未来您可以使用这种方式;
let MongoClient = require('mongodb').MongoClient;
const connectionString = 'mongodb://localhost:27017';
(async () => {
let client = await MongoClient.connect(connectionString,
{ useNewUrlParser: true });
let db = client.db('dbName');
try {
const res = await db.collection("collectionName").updateOne({
"someKey": someValue
}, { $set: someObj }, { upsert: true });
console.log(`res => ${JSON.stringify(res)}`);
}
finally {
client.close();
}
})()
.catch(err => console.error(err));
谢了。与ES6:
const middleWare = require('middleWare');
const MONGO = require('mongodb').MongoClient;
router.get('/', middleWare(async (req, res, next) => {
const db = await MONGO.connect(url);
const MyCollection = db.collection('MyCollection');
const result = await MyCollection.find(query).toArray();
res.send(result);
}))