#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