Node.js+MongoDB指定字段查询结果显示异常求助
解决MongoDB Node.js查询指定字段失效及弃用警告问题
我来帮你搞定这两个问题,你遇到的情况其实是MongoDB Node.js驱动版本更新带来的语法变化,加上旧API弃用的警告,咱们一步步解决:
1. 修复查询指定字段失效的问题
你用的find({}, { _id: 0, name: 1 })语法是旧版驱动的写法,在3.0以上的新版驱动中,投影参数需要放在options对象的projection属性里,不然驱动会把第二个参数当成游标配置选项,导致投影不生效(要么返回空数组,要么返回全字段)。
修改后的代码如下:
var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/"; MongoClient.connect(url, { useUnifiedTopology: true }, function(err, db) { if (err) throw err; var dbo = db.db("mydb"); // 明确指定projection属性 dbo.collection("customers").find({}, { projection: { _id: 0, name: 1 } }) .toArray(function(err, result) { if (err) throw err; console.log(result); db.close(); }); });
2. 消除DeprecationWarning警告
你看到的[DEP0079] DeprecationWarning是因为Node.js或MongoDB驱动的旧版API被弃用了,添加useUnifiedTopology: true连接选项就能解决这个问题(上面的代码已经加上了)。如果还是有其他警告,建议把你的MongoDB驱动升级到最新稳定版,执行命令:
npm install mongodb@latest
验证效果
运行修改后的代码,应该就能正确返回只包含name字段的文档数组,同时不会再出现那个弃用警告了。如果还是返回空数组,先检查mydb数据库的customers集合里是否有数据,或者用findOne()先验证集合连接正常。
内容的提问来源于stack exchange,提问作者supmethods
相关产品推荐
相关产品推荐

