繁体   English   中英

从对象返回未定义

[英]Undefined returned from object

在下面的代码中,当我尝试控制台记录数据对象时,它将返回正确的用户名和密码,如下所示。

[ { _id: 5b7d6366db5064296cbeb79c,
    username: 'ajith',
    password: 'sdf2343@3e!',
    __v: 0 } ]

但是data.username的控制台日志返回未定义。 为什么会这样呢? 为什么它不返回值?

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({extended:true}));

mongoose.connect
("mongodb://<user>:<pass>@ds129762.mlab.com:29762/<dbnmae>")

var userSchema = new mongoose.Schema({
     username : String,
     password : String
});

var User = mongoose.model("User",userSchema);

app.get("/",function(req,res){
   User.find({"username": "ajith"},function(err,data){
      if(err){
         console.log(err);
      }else{
        console.log(data);
        console.log(data.password+" "+data._id);
      }
    });
});


app.listen(3000,function(){
    console.log("server started and listening at the port 3000");
});

您必须使用data[0].username因为data是一个包含单个值的数组。

User.find()将返回一个数组结果。 因此,您需要使用findOne()查询。

User.findOne({"username": "ajith"},function(err,data){
   if(err){
       console.log(err);
   }else{
     console.log(data);
     console.log(data.password+" "+data._id);
   }
});

如果您对所有文档都具有唯一的username属性,则始终建议对单独的query组合使用findOne()查询,而不要使用find()来返回数组,因为您希望从猫鼬查询中获得单个文档。 当您为相同的代码编写测试用例时,这也很有用,因为您可以声明一个对象响应而不是数组响应。

它不返回任何内容,因为data是一个数组。 如果只想访问该数组的第一个元素,请使用

console.log(data[0].password+" "+data[0]._id);

或者,如果要查看所有元素,请使用循环:

data.forEach(d => console.log(d.password+" "+d._id);

如果您只希望从MongoDB返回一个文档,请使用Model#findOne

User.findOne({
  "username": "ajith"
}, function(err, user) {
  if (err) {
    console.log(err);
  } else {
    console.log(user);
    console.log(user.password + " " + user._id);
  }
});

当您没有为输出定义专用类型,而是对象,数组等(通常是没有字段的根对象)时,通常会发生这种情况。 因此,在您的情况下,它将返回一个对象本身,然后向您显示内部内容,但是您无法调用其字段,因为您的应用程序对它们一无所知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM