deno подключается к mongodb

#mongodb #deno

#mongodb #deno

Вопрос:

Я пытался следовать этому руководству https://www.youtube.com/watch?v=VF38U2qd27Q , но безрезультатно. Я понял, что синтаксис в видео уже устарел, например, connectWithUri, чтобы стать connect.

но когда я попытался подключиться к mongo с помощью deno_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)
 

какая часть неверна?

Комментарии:

1. не работает — это не очень полезное описание проблемы. Обычно есть причина, по которой что-то не работает , и вы получаете коды ошибок или исключения для этого. Не могли бы вы предоставить дополнительную информацию? Кстати. это просто Deno, а не Denojs.

2. потому что сообщение об ошибке также сбивает с толку, но я предоставлю информацию об ошибке в потоке

Ответ №1:

Просматриваю deno_mongo README на GitHub.

Для локальной базы данных вы должны использовать

 //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 или более поздняя»

Строка подключения отображается ниже. Серверы перечислены через запятую следующим образом:

...<name-of-cluster>-00-00.fbnrc.mongodb.net:27017,<name-of-cluster>-00-01.fbnrc.mongodb.net:27017,<name-of-cluster>-00-02.fbnrc.mongodb.net:27017...

К вашему СВЕДЕНИЮ-2

Убедитесь, что главная реплика указана первой в массиве серверов. Потому что, если вы хотите выполнять вставки в базу данных, основная реплика должна быть нацелена. Для меня это был 2-й URL-адрес mongo, поэтому для меня работал следующий массив серверов:

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

Комментарии:

1. Не удалось заставить это работать до просмотра этого сообщения. Спасибо!!

Ответ №2:

приведенный ниже код работает для меня.

 
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)

 

Комментарии:

1. это означает отсутствие аутентификации в базе данных? вы не использовали пользователя и пароль для базы данных? безопасно ли это? это лучшая практика?

2. Нет, это не лучшая практика. Это всего лишь пример.

Ответ №3:

Я также столкнулся с той же проблемой при обновлении 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");
 

Комментарии:

1. спасибо за ваш ответ, но на самом деле я все еще не могу подключить свой deno к mongo bcs из-за проблемы с авторизацией. Автор deno_mongo создал проблему github.com/manyuanrong/deno_mongo/issues /.

2. Я не сталкивался с этой проблемой, так как у меня есть локальная настройка mongodb.

3. используете ли вы учетные данные в своем локальном mongodb?

4. Нет, у меня его нет. все еще получаешь ту же ошибку?

5. Я попробую ввести пароль и дам вам знать

Ответ №4:

У меня была такая же проблема в Windows 10, так что попробуйте сделать это на вашем локальном mongodb:

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