猫鼬从model.find和model.FindOne响应中删除了一些数据

时间:2019-04-07 18:47:21

标签: node.js mongodb mongoose

我正在构建Express / Node应用程序,并且正在尝试构建登录控制器。当请求传递到/ login时,我可以使用Mongoose的model.findOne在Mongo集合中找到用户详细信息,但是问题在于该函数返回的内容并不是mongo文档中的全部内容。

通过Robo 3T查询数据将返回所有信息

这是我的模特

{
    firstname: String,
    surname: String,
    fullname: String,
    firthDate: Date,
    identityType: String,
    identityNumber: String,
    address: {
        residential: Object,
        business: Object
    },
    contact: {
        email: String,
        cellphone: String,
        home: String,
        business: String,
        fax: String
    },
    compliance: {
        type: String,
        value: String
    },
    account: {
        type: String,
        username: String,
        password: String,
        masala: String
    },
    created: Date,
    updated: Date
}

这是我的控制人:

user.findOne({"account.username": username}, (err, doc) => {
        if (!err) {
            //  found user. Compare passwords and return JWT;
            console.log(doc);
            bcrypt.compare(password, doc.account.password, (err, isValid) => { 
                //  I get an error here : Cannot read property password of undefined.
                if (!err) {
                    if (isValid) {
                        //  generate jwt and send back to user;


                    }
                } else {
                    //  invalid password provided;

                }
            });
        } else {

        }
    });

我得到一个错误:无法读取属性“未定义的密码”。 这是“ doc”中的响应:

{
    firstname: "hello",
    surname: "world",
    fullname: "hello world",
    firthDate: "01 January 1970",
    identityType: "idnumber",
    identityNumber: "12345",
    address: {
        residential: {},
        business: {}
    },
    contact: {
        email: "",
        cellphone: "",
        home: "",
        business: "",
        fax: ""
    },
    compliance: {
        type: "",
        value: ""
    }
}

好像findOne函数的响应中没有返回“ doc.account”数据。我不知道为什么,因为我首先使用的是“ doc.account”中的数据。

1 个答案:

答案 0 :(得分:0)

您的帐户架构错误。 对于嵌套对象,应该是这样。

acount:{
 username: {type:String},
 password: {type:String},
}

现在将其视为具有属性用户名和密码的对象