MongoDB如何查询指定集合的所有数据并在API接口中正确返回
问题原因
- MongoDB的
find()方法返回的是游标(Cursor)对象,而非直接的查询结果,你当前返回的就是游标本身的内部结构,因此会出现_events、_eventsCount这类字段 async函数下没有对数据库异步操作加await关键字,操作未执行完成就直接返回了结果
修复代码
exports.objfields = async (req, res, next) => { try { var db = mongo.connection; var objeto = req.headers.objeto; // 增加await等待查询完成,调用toArray()将游标转为实际的文档数组 const result = await db.db.collection(objeto).find({}).toArray(); return res.status(200).send({message:result}); } catch (error) { // 原状态码401代表授权失败,不符合当前错误场景,调整为500服务端错误 return res.status(500).send({ message: error.message }); } };
补充优化建议
- 若仅需要获取集合的所有字段名,不需要返回全量文档,可以改用聚合操作或者
distinct方法提取字段键,避免全表扫描影响性能 - 集合名建议放在请求路径参数或者请求体中传递,比放在请求头更符合REST接口设计规范
- 建议增加参数校验逻辑,判断
objeto是否为空、是否为合法集合名,避免异常输入触发报错
内容的提问来源于stack exchange,提问作者Guilherme Cavenaghi
相关产品推荐
相关产品推荐

