josmanuel
josmanuel

Reputation: 445

Why do i get undefined when console.log(object.property) of mongoose

Why am i getting undefined when console.log(object.property)?

This is my code:

const adminusersSchema = new mongoose.Schema({});
const adminusers = mongoose.model('adminusers', adminusersSchema, 'adminusers');

app.post('/login', async (req, res)=>{
    let result = await adminusers.find();
    console.log(result[0]);
    console.log(result[0].mail);
    res.send();
});

And this is the output in console:

Connecting to DB
Connected to DB
Server on port: 3000
{
  _id: 6110430c94569f3dfc90146d,
  mail: '[email protected]',
  password: 'admin123'
}
undefined

If i try JSON.parse i get an error:

app.post('/login', async (req, res)=>{
    let result = await adminusers.find();
    console.log(result[0]);
    console.log(JSON.parse(result[0]).mail);
    res.send();
});

SyntaxError: Unexpected token _ in JSON at position 4

I can't see what is the problem with my code, because if i do a:

app.post('/login', async (req, res)=>{

    let object = {
        'test': 'approved',
        'problem': 'solved'
    }

    console.log(object)
    console.log(object.test);

    // let result = await adminusers.find();
    // console.log(result[0]);
    // console.log(JSON.parse(result[0]).mail);
    // res.send();
});

My output is:

Connecting to DB
Connected to DB
Server on port: 3000
{ test: 'approved', problem: 'solved' }
approved

Upvotes: 0

Views: 848

Answers (1)

Wodlo
Wodlo

Reputation: 937

I would try turning the mongoose document into a regular javascript object, you can use .toObject() or if you plan on returning it from your endpoint as JSON then perhaps use .toJSON() instead. https://mongoosejs.com/docs/guide.html#toObject i.e.

const adminusersSchema = new mongoose.Schema({});
const adminusers = mongoose.model('adminusers', adminusersSchema, 'adminusers');

app.post('/login', async (req, res)=>{
    const result = await adminusers.find();
    const objectResult = result.toObject();
    console.log(objectResult[0]);
    console.log(objectResult[0].mail);
    res.send();
});

Another option as suggested in the comments would be to use the lean() function on your query, as Documents returned from queries with the lean option enabled are plain javascript objects, not Mongoose Documents - https://mongoosejs.com/docs/api.html#query_Query-lean

I.e.

const adminusersSchema = new mongoose.Schema({});
const adminusers = mongoose.model('adminusers', adminusersSchema, 'adminusers');

app.post('/login', async (req, res)=>{
    let result = await adminusers.find().lean();
    console.log(result[0]);
    console.log(result[0].mail);
    res.send();
});

Upvotes: 1

Related Questions