如何将MongoDB集合查询结果的单个字段值保存到独立变量中
解决方案
问题根因
collection.find().toArray()回调拿到的data是所有符合查询条件的文档构成的数组,不是单个文档对象,你没有访问数组内的文档就直接提取字段,自然会返回undefined- 原有代码缺少错误判断逻辑,查询或集合获取出现异常时也会导致变量赋值失败
代码实现
场景1:预期查询仅返回1条匹配结果
connection.on('error', console.error.bind(console, 'connection error:')); connection.once('open', function () { connection.db.collection("seekers", function(err, collection){ // 新增集合获取错误判断 if (err) { console.error('获取集合失败:', err) return } collection.find({field: 'electric engineer'}).toArray(function(err, data){ // 新增查询错误判断 if (err) { console.error('查询数据失败:', err) return } // 先判断是否存在匹配结果 if (data.length === 0) { console.log('无匹配的查询结果') return } // 提取第一条匹配文档的对应字段 const mail = data[0].mail const description = data[0].description // 测试打印 console.log(mail); console.log(description); }) }); });
场景2:预期查询返回多条匹配结果,提取所有条目的对应字段存为数组
connection.on('error', console.error.bind(console, 'connection error:')); connection.once('open', function () { connection.db.collection("seekers", function(err, collection){ if (err) { console.error('获取集合失败:', err) return } collection.find({field: 'electric engineer'}).toArray(function(err, data){ if (err) { console.error('查询数据失败:', err) return } if (data.length === 0) { console.log('无匹配的查询结果') return } // 遍历提取所有文档的对应字段 const mailList = data.map(item => item.mail) const descriptionList = data.map(item => item.description) // 测试打印 console.log(mailList); console.log(descriptionList); }) }); });
补充优化
如果查询确实只需要返回单条结果,建议直接使用findOne方法,无需额外处理数组:
collection.findOne({field: 'electric engineer'}, function(err, doc) { if (err) { console.error('查询失败:', err) return } if (!doc) { console.log('无匹配结果') return } const mail = doc.mail const description = doc.description })
内容的提问来源于stack exchange,提问作者Hai
相关产品推荐
相关产品推荐

