Не удалось установить соединение mongodb с nodejs

#node.js #mongodb #mongodb-nodejs-driver

Вопрос:

Я пробовал это в nodejs, но я получаю неопределенность в качестве вывода в своей консоли

 // Connect using a MongoClient instance
const MongoClient = require("mongodb").MongoClient;
const test = require("assert");
// Connection url
const url = "mongodb://localhost:27017";
// Database Name
const dbName = "test";
// Connect using MongoClient
const mongoClient = new MongoClient(url);
mongoClient.connect(function (err, client) {
  const db = client.db(dbName);
  try {
    db.collection("employeeDetails")
      .find({})
      .toArray(function (err, res) {
        console.log(res);
      });
  } catch (e) {
    console.log(e);
  } finally {
    client.close();
  }
});
 

У меня есть данные в mongodb :
введите описание изображения здесь

Как я могу получить информацию о сотруднике в своей консоли Любая помощь будет оценена

Ответ №1:

Вы закрываете соединение до получения результатов. Если вы напечатаете err внутри toArray() вместе с результатом, вы увидите ниже ошибку —

 MongoExpiredSessionError: Cannot use a session that has ended
 

Это происходит потому db.collection("employeeDetails")... , что вызывается , но ожидает результатов обратного вызова, до тех пор, пока он не продвинется вперед, и так как после этого утверждения вы выходите try-catch , вы входите в finally который закрывает сеанс. Когда db.collection... вызов обработан, этот сеанс уже завершен, и вы видите эту ошибку.

Вы можете использовать асинхронное ожидание. Измените свой код, как показано ниже —

 // Connect using a MongoClient instance
const MongoClient = require("mongodb").MongoClient;
const test = require("assert");
// Connection url
const url = "mongodb://localhost:27017";
// Database Name
const dbName = "test";
// Connect using MongoClient
const mongoClient = new MongoClient(url);
mongoClient.connect(async function (err, client) {
  const db = client.db(dbName);
  try {
    const result = await db.collection('employeeDetails').find({}).toArray();
    console.log(result);
  } catch (e) {
    console.log(e);
  } finally {
    client.close();
  }
});

 

В строке mongoClient.connect(async function (err, client).. , которую мы используем асинхронно перед функцией обратного вызова и позже внутри, мы можем просто получить результат, используя —

 const result = await db.collection('employeeDetails').find({}).toArray();
 

После этого console.log ваши результаты будут напечатаны правильно.

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

1. да, это сработало, большое вам спасибо

Ответ №2:

Это работает для меня let result = await collection(collection).find(query).toArray()