#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");