H. H
H. H

Reputation: 103

nodejs , mongo find return no data

I am trying to get list of the data from mongodb using find() and although I do have data at the collection, it returns no data! I can't figure out what the reason is, can anyone help?

result like : { error: false, massage: [ ] }

this is the project Dependencies

 "dependencies": {
        "body-parser": "^1.19.0",
        "express": "^4.17.1",
        "express-handlebars": "^3.1.0",
        "mongoose": "^5.8.3",
        "nodemon": "^2.0.2"
   }

server.js

require('./models/db');

const express = require('express');

const loController = require('./controllers/loController');

var app = express();

app.listen(3000, () => {
    console.log('I am Listening ... ');
});

app.use('/lomanager', loController);

db.js

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/LOManager', { useNewUrlParser: true, useUnifiedTopology: true }, (error) => {
    if (!error) console.log('mongoose connection success');
    else console.log("error with mongo connnect" + error);
});

require('./lo.model');

lo.model.js

const mongoose = require('mongoose');

var loSchema = new mongoose.Schema({
    _id: Number,
    name: String,
    email: String
});

module.exports = mongoose.model('LO', loSchema);

loController.js

const express = require('express');
var loSchema = require('../models/lo.model');
var mongoose = require('mongoose');

var router = express.Router();

router.get('/', (req, res) => {
    res.json('helo from lo Controller');
});

router.get('/list', (req, res) => {
    var result = {};
    loSchema.find({}, (err, data) => {
        if (err) {
            result = { "error": true, "message": "error in the find" }
        } else {
            result = { "error": false, "massage": data };
        }
        res.json(result);
    });
});

module.exports = router;

Upvotes: 1

Views: 879

Answers (2)

H. H
H. H

Reputation: 103

that happened because Mongoose pluralizes the collection name by default

so we can also do it like that:

var loSchema = new mongoose.Schema({
    _id: Number,
    name: String,
    email: String
} , {collection: 'LO'});


module.exports = mongoose.model('LO', loSchema);

this link explained why! mongoose-force-collection-name

Upvotes: 0

Mahesh Bhatnagar
Mahesh Bhatnagar

Reputation: 1080

your collection name is 'LO' so please use that code

module.exports = mongoose.model('LO', loSchema,'LO');

Upvotes: 3

Related Questions