我熟悉如何从Mongo shell获取文档,但是在通过Node连接时使用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()根本不同吗?

最佳答案

是。 find()返回必须在其上进行迭代的游标。 findOne()返回单个文档,而不是游标。如果需要结果数组,则必须通过迭代游标来“自行构建”,例如:

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

关于node.js - 通过 Node 连接到MongoDB之后,`find()`不能像`findOne()`一样工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58769383/

10-13 00:25