Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB查询在Mongo Shell中工作,但在Node.js中不工作?_Node.js_Mongodb - Fatal编程技术网

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

MongoDB查询在Mongo Shell中工作,但在Node.js中不工作?,node.js,mongodb,Node.js,Mongodb,我一直在使用MongoDB开发Node.js服务器 每当我在Mongo Shell中使用此行时: db.users.findOne({name:john},{password:true,\u id:false})。password 它工作正常(connor是预期的答案) 但是,在Node.js中,使用与Node.js语法相适应的同一行: db.collection('users').findOne({name:"john"},{password:true, _id:false}).passwor

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

每当我在Mongo Shell中使用此行时:

db.users.findOne({name:john},{password:true,\u id:false})。password

它工作正常(
connor
是预期的答案)

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

db.collection('users').findOne({name:"john"},{password:true, _id:false}).password
它只返回未定义的

我在本地和远程服务器上都尝试了相同的代码,得到了相同的答案

我认为这可能是数据库的连接错误,但是
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();
});

有什么建议吗?

NodeJS的MongoDB驱动程序使用回调来处理查询结果。对的调用不返回结果。相反,它需要回调来处理结果:

// 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);
  });

您应该使用callbackIt只返回
TypeError:cannotreadproperty'password'为null
,这意味着它找不到名为“john”的用户。您需要取消对
db.collection('users').insertOne({…})
查询的注释。仍然显示相同的错误,正如我所说的,文件在数据库中,Mongo Shell可以读取它。我已经用查询中遗漏的部分更新了答案。仍然得到相同的错误:
TypeError:无法读取null的属性“password”
:\