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