【问题标题】:`find()` Not Working Like `findOne()` After Connecting to MongoDB Via Node通过节点连接到 MongoDB 后,`find()` 不像 `findOne()` 那样工作
【发布时间】:2019-11-08 15:23:36
【问题描述】:

我熟悉如何从 Mongo shell 获取文档,但是在通过 Node.js 连接时使用 find() 获取文档时遇到了困难。

我现在得到的看起来像是很多 cursor 信息,但不是实际的文档。

我需要对以下代码进行哪些更改,以便将实际文档记录到控制台以获取“结果”?

const config = require('./../../../configuration');
const url = config.get('MONGO_URL');
const dbName = config.get('MONGO_DATABASE');

const MongoClient = require('mongodb').MongoClient;
const client = new MongoClient(url);

module.exports = async function getSchedules() {
  let results;
  return new Promise((resolve, reject) => {
    client.connect(async function (err) {
      if (err) return reject(err);
      try {
        const db = await client.db(dbName);
        results = await db.collection('schedules').find();
      } catch (error) {
        return reject(error);
      }
      return resolve(results);
    });
  });
};

...这里是我实际尝试获取文件的地方:

async function getSchedulesFromDB() {
  await getSchedules().then((schedules => {
    console.log('schedules: ', schedules); // expect result here
    return schedules;
  }));
}

当我在findOne() 上使用这种相同类型的代码结构时,它起作用了。但是在这里使用find() 时不是。我错过了什么? find() 的工作方式是否与 findOne() 有根本的不同?

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    是的。 find() 返回一个您必须对其进行迭代的游标。 findOne() 返回单个文档,而不是游标。如果你想要一个结果数组,你必须通过迭代光标来“自己构建”,比如:

    results = [];
    db.collection('schedules').find().forEach(function(d) { results.push(d); });
    
    

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 2022-01-25
      • 2023-01-04
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多