mongodb / mongoose возвращает пустой массив при нахождении всех

#node.js #mongodb #mongoose

#node.js #mongodb #mongoose

Вопрос:

Я пишу письмо Node.js серверная часть для существующего кластера mongodb Atlas.

В моих маршрутах, когда я запускаю

 const routes = (app) => {
    app.route('/file')
        .get((req, res, next) => {
            console.log('request from : '   req.originalUrl)
            console.log('request type : '   req.method)
            next();
        }, getFiles);
}
 

где getFiles это происходит следующим образом:

 const ChronicFile = mongoose.model('File', FileSchema);
export const getFiles = (req, res) => {
    ChronicFile.find({}, (err, chronicFile) => {
        if (err) {
            res.send(err);
        }
        console.log(chronicFile);
        res.json(chronicFile);
    });
}
 

Я получаю возвращенный пустой массив:

 ur server running on port4000
request from : /file
request type : GET
[]
 

Структура БД в соответствии с оболочкой mongodb — это общая БД с названием Chronic и три коллекции с названием Chronic Files , fs.chunks , и fs.files . Моя цель — запросить коллекцию fs.files и получить все оттуда.

Схема внутри fs.files коллекций выглядит следующим образом:

 {
   "_id":{
      "$oid":"604e57219ffdaa7e11a8edad"
   },
   "length":{
      "$numberLong":"3163108"
   },
   "chunkSize":261120,
   "uploadDate":{
      "$date":"2021-03-14T18:34:10.586Z"
   },
   "filename":"4-dance-a-complex.mp3",
   "metadata":{
      
   }
}
 

и моя схема mongoose выглядит следующим образом:

 import mongoose from 'mongoose';

const Schema = mongoose.Schema;

export const FileSchema = new Schema({
    id: {
        type: mongoose.Types.ObjectId
    },
    chunkSize : {
        type: Number
    },
    fileName : {
        type: String
    },
    length: {
        type: Number
    },
    metadata : {
        type: Object
    },
    uploadDate : {
        type: Date
    }
}, { collection : 'Chronic.fs.files'});
 

Я добавил название коллекции, как показано выше, потому что я просмотрел предыдущие сообщения stackoverflow, и у них была проблема с именованием. Я что-то не так здесь делаю или я что-то еще упускаю? Когда я делаю db.getName() это в оболочке mongo, он показывает Chronic , и когда я db.fs.files.find() это делаю, он выводит все записи в этой коллекции.

Ответ №1:

Ответ был в этом фрагменте кода:

 const ChronicFile = mongoose.model('File', FileSchema);
export const getFiles = (req, res) => {
    ChronicFile.find({}, (err, chronicFile) => {
        if (err) {
            res.send(err);
        }
        console.log(chronicFile);
        res.json(chronicFile);
    });
}
 

Мне нужно было передать фактическое имя коллекции в модель mongoose, а не просто File