#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()