javascript - Mongodb 查找不返回数组

标签 javascript node.js mongodb asynchronous promise

我不确定我在这里遗漏了什么。我想在 Nodejs 函数中查询 MongoDB 数据库。下面的 jobs 变量一直返回 undefined。我期待它返回一个数组。如果我在 collection.find 中运行 console.log,它会输出我试图返回的数组。

async function getDataFromMongoDB(page) {
  const MongoClient = require("mongodb").MongoClient;
  const uri = "mongodb://localhost:3001";
  const client = new MongoClient(uri, { useNewUrlParser: true });
  client.connect(async function(err) {
    console.log(5, err);
    const collection = client.db("meteor").collection("jobs");

    const jobs = await collection.find().toArray((err, items) => {
      return items;
    });
    console.log("jobs", jobs);

    // return jobs;
    // console.log(jobs);

    // perform actions on the collection object
    client.close();
  });
}

最佳答案

client.connectasync 函数并接受回调。您不能在回调范围之外访问 jobs 变量。

为此,您可以将 client.connect 方法包装到一个函数中,然后可以从那里返回 promise。

async function getDataFromMongoDB(page) {
  const MongoClient = require("mongodb").MongoClient;
  const uri = "mongodb://localhost:3001";
  const client2 = new MongoClient(uri, { useNewUrlParser: true });
  const client = await connectToMongodb(client2)
  const collection = client.db("meteor").collection("jobs");
  const jobs = await collection.find().toArray();
  console.log("jobs", jobs);
}

connectToMongodb(client) {
  return new Promise((resolve, reject) => {
    client.connect(function(err) {
      return resolve(client)
    });
  })
}

关于javascript - Mongodb 查找不返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58704367/

相关文章:

javascript - 列表项不会因打开辅助功能而改变高度以响应大文本

node.js - 如何进行 Twitter OAuth Echo 验证调用?

mongodb - 分组并计算存储在两个单独字段中的 ObjectID 的出现次数

javascript - 按两个标准对多维数组进行排序?

javascript - 在 JavaScript 中访问网页的 HTTP header

php - 下拉列表框中的复选框内的复选框

node.js - 如何监视 MongoDB 更改流中特定字段的更改

node.js - Athena Node.js AWS SDK - 任何请求都会引发 InvalidRequestException

mongodb - 如何存储时间戳? CreatedOn 是否有自动字段

mongodb - NoSQL(Mongo)的面向文档的数据抽象层?