我熟悉如何从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/