【问题标题】:Mongodb find doesn't return arrayMongodb find 不返回数组
【发布时间】:2019-11-05 04:07:48
【问题描述】:

我不确定我在这里缺少什么。我想在 Nodejs 函数中查询 MongoDB 数据库。下面的jobs 变量不断返回未定义。我期待它返回一个数组。如果我在 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();
  });
}

【问题讨论】:

  • 试试const jobs = await collection.find().toArray(); console.log(jobs)
  • 谢谢,@Subburaj 有效,但我仍然无法从 client.connect 找到工作。

标签: javascript node.js mongodb asynchronous promise


【解决方案1】:

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)
    });
  })
}

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多