0

我在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 中有数据: 在此处输入图像描述

我如何在我的控制台中获取我的员工详细信息 任何帮助将不胜感激

4

2 回答 2

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将正确打印您的结果。

于 2021-10-01T12:44:14.140 回答
0

这对我有用 let result = await collection(collection).find(query).toArray()

于 2021-10-01T12:42:14.303 回答