MongoDB查询在Mongo Shell中工作,但不在Node.js中?

我一直在使用MongoDB来开发一个Node.js服务器。

每当我在Mongo Shell中使用这行:

db.users.findOne({name:"john"},{password:true, _id:false}).password

它可以正常工作, 因为你可以看到 ( connor是预期的答案)

但是,在Node.js中,使用适用于Node.js语法的同一行:

 db.collection('users').findOne({name:"john"},{password:true, _id:false}).password 

它只是返回undefined

我在本地和远程服务器上都使用了相同的代码,并得到相同的答案。

我认为这可能是一个连接数据库的错误,但insertOne()在Node.js中正常工作,所以我想这不会是连接。

这里你是相关的一段代码:

 var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); var ObjectId = require('mongodb').ObjectID; var connection_string = 'mongodb://127.0.0.1:27017/grumpyworld'; if(process.env.OPENSHIFT_MONGODB_DB_PASSWORD){ connection_string = process.env.OPENSHIFT_MONGODB_DB_URL; } console.log("MongoDB connection_string: "+connection_string); MongoClient.connect(connection_string, function(err, db) { console.log("Connected to DB"); //This line is commented so I don't insert a file each time I try the code //db.collection("users").insertOne({"name":"john", "password":"connor"}); var pass = db.collection('users').findOne({name:"john"},{password:true, _id:false}).password; console.log(pass); db.close(); }); 

有什么build议?

NodeJS的MongoDB驱动程序使用callback来处理查询结果。 调用db.collection('users')。findOne({…})不会返回结果。 相反,它需要一个callback来处理结果:

 // Pass a callback as an argument to the query. db.collection('users') .findOne({name:"john"}, { fields: { password: true, _id: false } }, function(err, user) { console.log(user.password); });