【问题标题】:deno connect to mongodbdeno 连接到 mongodb
【发布时间】:2021-04-05 04:40:54
【问题描述】:

我已尝试遵循本教程https://www.youtube.com/watch?v=VF38U2qd27Q,但无济于事。 我意识到视频中的语法已经过时了,例如 connectWithUri 变成了连接。

但是当我尝试使用带有最新文档的 deno_mongo 连接到 mongo 时,它仍然无法正常工作。

import { MongoClient } from "https://deno.land/x/mongo@v0.20.1/mod.ts";

const dbString = `mongodb://${mongoUser}:${mongoPass}@${mongoHost}:${mongoPort}`;
const client = new MongoClient();
client.connect(dbString);
const db = client.database(mongoDB)
this.users = db.collection<UserSchema>("users");

然后我找到了另一个库denodb,但再次无法连接到 mongodb:

import { Database } from 'https://deno.land/x/denodb/mod.ts';

const dbString = `mongodb://${mongoUser}:${mongoPass}@${mongoHost}:${mongoPort}`;
this.db = new Database('mongo', {
  uri: dbString,
  database: mongoDB
});

错误信息:

error: Uncaught AssertionError
deno        |     throw new AssertionError(msg);
deno        |           ^
deno        |     at assert (asserts.ts:152:11)
deno        |     at MongoClient.database (client.ts:48:5)
deno        |     at new connectDB (connectDB.ts:35:23)

哪一部分错了?

【问题讨论】:

  • 不工作 - 这不是对问题的真正有用的描述。通常不工作是有原因的,你会得到错误代码或异常。你能提供更多信息吗?顺便提一句。只是 Deno,不是 Denojs。
  • 因为错误信息也很混乱,但我会在线程中提供错误信息

标签: mongodb deno


【解决方案1】:

下面的代码对我有用。


import { DataTypes, Database, Model } from 'https://deno.land/x/denodb/mod.ts';

const db = new Database('mongo', {
  host: 'mongodb://localhost:27017',
  username: '',
  password: '',
  database: 'DBMYAPP',
});
console.log(db)

【讨论】:

  • 这意味着没有对数据库的身份验证?你没有使用数据库的用户名和密码?安全吗?这是最佳做法吗?
  • 不,这不是最佳实践。这只是一个例子。
【解决方案2】:

在将 deno_mongo 更新到最新版本时,我也遇到了同样的问题。使用await解析client.connect方法

试试这个:

import { MongoClient } from "https://deno.land/x/mongo@v0.20.1/mod.ts";

const dbString = `mongodb://${mongoUser}:${mongoPass}@${mongoHost}:${mongoPort}`;
const client = new MongoClient();
await client.connect(dbString);
const db = client.database(mongoDB)
this.users = db.collection<UserSchema>("users");

【讨论】:

  • 感谢您的回答,但实际上我仍然无法将我的 deno 连接到身份验证问题的 mongo bcs。 deno_mongo 的作者创建了问题github.com/manyuanrong/deno_mongo/issues/…
  • 我没有遇到这个问题,因为我有本地 mongodb 设置。
  • 您在本地 mongodb 上使用凭据吗?
  • 不,我没有。你仍然遇到同样的错误吗?
  • 我会尝试输入密码并告诉你
【解决方案3】:

我在 Windows 10 上遇到了同样的问题,所以试试这个 在本地 mongodb 上:

await client.connect("mongodb://127.0.0.1:27017");

【讨论】:

    【解决方案4】:

    查看GitHub 上的 deno_mongo README。

    对于你应该使用的本地数据库

    //Connecting to a Local Database
    await client.connect("mongodb://localhost:27017");
    

    如果您要连接到 Mongo Atlas 数据库(可能还有任何其他远程数据库),您应该使用:

    //Connecting to a Mongo Atlas Database
    await client.connect({
      db: "<db_name>",
      tls: true,
      servers: [
        {
          host: "<db_cluster_url>",
          port: 27017,
        },
      ],
      credential: {
        username: "<username>",
        password: "<password>",
        db: "<db_name>",
        mechanism: "SCRAM-SHA-1",
      },
    });
    

    仅供参考

    如果您使用的是 Mongo Atlas,请确保将您从 Mongo Atlas 仪表板中的“连接向导”获得的连接字符串拆分为服务器阵列中的 3 个(或您拥有多少个副本)条目。像这样:

    servers: [
      {
        host: this.dbUrl1, // e.g. <name-of-cluster>-00-00.fbnrc.mongodb.net
        port: 27017,
      },
      {
        host: this.dbUrl2, // e.g. <name-of-cluster>-00-01.fbnrc.mongodb.net
        port: 27017,
      },
      {
        host: this.dbUrl3, // e.g. <name-of-cluster>-00-02.fbnrc.mongodb.net
        port: 27017,
      }
    ]
    

    您通过以下方式获取连接字符串:

    • 点击数据存储下的“集群”(屏幕左侧)
    • 点击“连接”按钮
    • 点击“连接到应用程序”
    • 选择驱动程序:“Node.js”和版本:“2.2.12 或更高版本”

    连接字符串如下所示。服务器以逗号分隔的方式列出,如下所示:

    ...&lt;name-of-cluster&gt;-00-00.fbnrc.mongodb.net:27017,&lt;name-of-cluster&gt;-00-01.fbnrc.mongodb.net:27017,&lt;name-of-cluster&gt;-00-02.fbnrc.mongodb.net:27017...

    FYI-2

    确保主副本列在服务器阵列的首位。因为如果您想插入数据库,则应该以主副本为目标。对我来说,这是第二个 mongo url,因此以下服务器数组对我有用:

    servers: [
      {
        host: this.dbUrl2,
        port: 27017,
      },
      {
        host: this.dbUrl1,
        port: 27017,
      },
      {
        host: this.dbUrl3,
        port: 27017,
      }
    ]
    

    【讨论】:

    • 在看到这篇文章之前无法让它工作。谢谢!!
    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2020-04-27
    • 2011-01-27
    相关资源
    最近更新 更多