MongoDB查询结果无法在JavaScript控制台打印问题求助
问题排查与修复
核心问题拆解
toArray()返回值处理错误:find().toArray()返回的是文档数组,不是单个文档。你直接访问dataset.firstName,相当于在数组对象上查找firstName属性,必然返回undefined。- 条件判断运算符误用:
dataset&dataset.firstName使用了位运算&,应该替换为逻辑与&&,否则判断逻辑会失效。 - 循环边界不合理:硬编码
i<50可能超出实际数据长度,应该基于返回的firstName数组真实长度循环。
修复后的代码
let dataset = await collection.find( { "users.0.firstName": "Terry" }, { _id: 0, firstName: { $map: { input: "$users", in: "$$this.firstName" } } } ).toArray(); // 遍历返回的文档数组 for (const doc of dataset) { // 安全检查当前文档是否存在firstName数组 if (doc?.firstName) { // 遍历输出每个firstName元素 doc.firstName.forEach(name => console.log(name)); } }
简化优化方案(单文档场景)
如果确定查询只会返回单个文档,可以用findOne()替代find().toArray(),直接获取单个对象,无需遍历数组:
let doc = await collection.findOne( { "users.0.firstName": "Terry" }, { _id: 0, firstName: { $map: { input: "$users", in: "$$this.firstName" } } } ); if (doc?.firstName) { doc.firstName.forEach(name => console.log(name)); }
内容的提问来源于stack exchange,提问作者user20957580
相关产品推荐
相关产品推荐

