[英]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.