MongoDB中find返回空结果但findOne正常的问题求助
问题分析与解决
问题核心原因
findOne()会直接返回匹配的单个文档,而find()返回的是MongoDB游标对象,并非直接的结果数组。你直接对游标执行JSON.stringify(),得到空对象{}是因为游标本身可序列化的属性极少,无法直接输出结果集。
正确解决方案
需要调用游标对象的toArray()方法,将其转换为包含所有结果的数组:
exports = async function(){ db = context.services.get("mongodb-atlas").db("2021_10_DB"); const user_col = db.collection("Users"); // 通过toArray()将游标转为结果数组 alarmingSubjs = await user_col.find().toArray(); console.log(JSON.stringify(alarmingSubjs)); return "Done"; }
对尝试方法的补充说明
- 移除
async/await后,find()和findOne()都会返回未resolved的Promise对象,直接序列化自然得到空对象,必须通过async/await或.then()处理异步结果。 - 回调函数方式需要配合
toArray()使用,正确写法如下:
exports = function(){ db = context.services.get("mongodb-atlas").db("2021_10_DB"); const user_col = db.collection("Users"); user_col.find().toArray(function(err, docs) { if(err) console.error(err); console.log(JSON.stringify(docs)); }); return "Done"; }
runCommand是数据库对象(db.runCommand(...))的方法,并非集合对象的方法,所以会出现TypeError,且这个方法也不是解决当前查询问题的必要选项。
内容的提问来源于stack exchange,提问作者Daniel Warfield
相关产品推荐
相关产品推荐

