我有一个 node .使用mongodb本机驱动程序的js应用程序.

Select :

  • mongoose-promises查询已弃用,它强制使用模式模型,这对我的应用程序来说有点开销.
  • mongoist——据称很棒,因为它是基于async/await构建的,并且完全promise ,但与mongodb的SSL连接错误和糟糕的文档记录——让我远离了这个解决方案.

我成功以优雅的方式实现的唯一解决方法是使用callback-promiseNPM包将mongodb驱动程序API转换为完全promise .

对于优雅的高性能方式有什么新 idea 吗?

推荐答案

由于所有答案都缺少一些位(捕捉块,判断客户机是否为null),所以我提出了自己的解决方案.使用Mongo服务器v4进行测试.0.7和 node JS驱动程序3.2.2.

请注意,这个示例是一个控制台程序,我们在finally块中关闭与服务器的连接.在web应用程序中,连接被重用.

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();
    }
}

await findOne();

Node.js相关问答推荐

CloudTasksClient在Firebase Function % s onDocumentCreated中实例化时导致错误

自动将Selify打开的Chrome窗口移动到Mac OS中的第三个显示器

Node.js PNG缓冲区获取未知图像格式错误

为什么在导出的函数中调用node-sqlite3中的数据库方法时不起作用?

TS 后端开发:prismagenerate找不到已安装的@tsed/prisma包

使用NodeJS通过服务账号列出Google Workspace用户

合并Shift对象数组以创建最终的排班表

Gulp 能否向 Docker 发出增量构建的第一次迭代完成的信号?

在 Atlas 触发器(Node JS)中正确初始化 Firebase 管理 SDK

nuxt:在 docker 镜像中找不到

在express js模型中将js转换为Typescript 时Typescript 错误

仅显示用户在 Reactjs 中使用服务器端发布的帖子是 Node Js、Mongodb

为什么 req.params.id 返回 undefined未定义?

您如何写入 aws lambda 实例的文件系统?

在Go中,编写非阻塞代码有意义吗?

为当前目录提供服务的简单文件服务器

我可以在 Heroku 中运行咖啡脚本吗?

node 应用程序是否有任何独立的 gui 模块

Forever + Nodemon 一起运行

未在 Windows 8.1 上构建的 node 包 - 缺少 Microsoft.Cpp.Default.props