Node.js 猫鼬隐藏属性
我使用基本类来封装Mongoose。即使我的查询正确返回Node.js 猫鼬隐藏属性,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我使用基本类来封装Mongoose。即使我的查询正确返回用户,我也无法直接访问其属性。以下代码打印user,但将user.email打印为未定义 问题: 当我使用console.log('User from DB:'+dbUser)时我看到完整保存的用户。但是,当我尝试访问dbUser.email时,我没有定义 const UserSchema = mongoose.Schema({ email: {type: String, index: {unique: true, sparse:
用户
,我也无法直接访问其属性。以下代码打印user,但将user.email打印为未定义
问题:
当我使用console.log('User from DB:'+dbUser)时代码>我看到完整保存的用户。但是,当我尝试访问dbUser.email时,我没有定义
const UserSchema = mongoose.Schema({
email: {type: String, index: {unique: true, sparse: true}},
password: String,
createdOn: {type: Date, default:Date.now },
});
const User = mongoose.model("User", UserSchema);
class Database{
static async getUser(userId) {
const user = await User.find(userId);
return user;
}
}
async function run() {
await mongoose.connect('mongodb://localhost/stack');
await Device.remove();
await User.remove();
const user = new User({'email':'email@address.com','password':'plainsecret'});
const newUser = await user.save();
console.log('New User: ',newUser);
console.log('Email: ' + newUser.email);
const dbUser = await Database.getUser(newUser._id);
console.log('User from DB: '+ dbUser);
console.log('User email from DB: ' + dbUser.email); //undefined???
return newUser
}
run().then( (user) => {
console.log('Done' + user);
process.exit(0);
}).catch((err) => {
console.log('Exception' + err);
process.exit(0);
})
似乎只是没有描述模型中的一些字段。若并没有,mongoose将不会在查询响应对象中添加这些字段。是否确实在用户模型中添加了电子邮件字段?您需要将virtuals:true
选项传递到架构定义中
现在,mongoose将在每次访问
全名属性:
console.log(axl.fullName);//Axl Rose
如果使用toJSON()或
toObject()(或在mongoose文档上使用JSON.stringify())mongoose
默认情况下将不包括虚拟对象。将{virtuals:true}传递给
toObject()或toJSON()
这是我这边的一个打字错误。因为User.find()
返回一个数组,所以当我试图打印它时,它不起作用。更正的代码应该是User.findById()
您是否检查了用户是否实际保存在数据库中?如果没有,则您的用户
架构定义可能存在一些问题代码>我看到完整保存的用户。但是,我尝试访问dbUser.email,但我没有定义。我的意思是,您是否确实使用其他工具检查数据库?默认情况下,Mongoose返回为保存而提供的对象。const dbUser=wait Database.getUser(newUser.\u id)代码>从数据库获取用户,我可以打印并查看它。是的,我也检查过Robo3T,是的,它在那里。但是当我打印dbUser时,我看到了它的所有属性。我可以在Mongodb现场看到它。但是无法从代码访问电子邮件属性。我添加了模型。我在NodeJSV9.3.0上用Mongoose5.0.3尝试了这段代码