Home > Software design >  empty result when getting data from mongodb with mongoose and node js
empty result when getting data from mongodb with mongoose and node js

Time:01-19

I'm trying to fetch all my documents from a collection in my MongoDb DB but I can't do it. I have absolutely no error but it just returns an empty array in my console.

Model :

import mongoose from "mongoose";

const websiteSchema = mongoose.Schema({
  id: {type: String},
  name: {type: String, required: true},
  url: {type: String, required: true},
  note: {type: Number, required: true}
});

export default mongoose.model("Website", websiteSchema); 

File in which I want to use the data :

import express from 'express';

import Website from '../models/website.js';

const routerWebsiteList = express.Router();

routerWebsiteList.get('/website-list', async function(req, res, next) {
  try {
    const websitesToCrawl = await Website.find({});
    console.log(websitesToCrawl);
  } catch (error) {
    res.status(500).json({message : "An error occured"});
  }
})

export default routerWebsiteList;

All I get in my console is [].

My data in my database seems good too : enter image description here

CodePudding user response:

Accully everything looking fine maybe you can use

require for import files

const name = require('name')

and for the export file :

module.exports = routerWebsiteList

after that be sure you connected your database correct like this

 async function database() {
   await mongoose
   .connect(process.env.DATABASE_URL)
   .then(() => {
      console.log("Database Coonected");
   })
   .catch((err) => {
     console.log(err);
   });
 }

 database()

Last detail is you don't need to put id on mongoose schema just remove it and finally change your model like this

const mongoose = require("mongoose");

const websiteSchema = mongoose.Schema({
  name: {type: String, required: true},
  url: {type: String, required: true},
  note: {type: Number, required: true}
});

const Website = mongoose.model("Website", websiteSchema); 

module.exports = Website

I hope that will be helpful. If you will be stuck somewhere feel free to type here again.

CodePudding user response:

I finally found what was the problem. The mongoose Schema was looking in a wrong collection named "websites". All I had to do was to specified the collection name in my model as following : ("websitesToCrawl" is the collection name)

export default mongoose.model("Website", websiteSchema, "websitesToCrawl");
  •  Tags:  
  • Related