Intento conectar una aplicación a mongoDB con express, por el momento no tengo ningún problema con los usuarios de la colección, funciona perfectamente pero no funciona para mi segunda colección, cuando intento obtener todos los datos de mi segunda colección, express devuélveme una matriz vacía.
// Import dependencies const mongoose = require('mongoose'); const express = require('express'); const router = express.Router(); // MongoDB URL from the docker-compose file const dbHost = 'mongodb://database/mybase'; // Connect to data mongoose.connect(dbHost); // create mongoose schema const userSchema = new mongoose.Schema({ mail: String, mdp: String, firstname: String, participants: Number }); // create mongoose schema const roomSchema = new mongoose.Schema({ roomId: String, }); // create mongoose model const User = mongoose.model('User', userSchema); const Room = mongoose.model('Room', roomSchema); /* GET api listing. */ router.get('/', function(req, res) { res.send('api works'); }); /* GET all users. */ router.get('/users', function(req, res) { User.find({}, function (err, users) { if (err) { res.status(500).send(error) } res.status(200).json(users); }); }); /* GET all rooms. */ router.get('/room', function(req, res) { Room.find({}, function (err, room) { if (err) { res.status(500).send(error) } res.status(200).json(room); }); }); module.exports = router;En mi mongo, los datos se almacenan así:
> db.users.find() { "_id" : ObjectId("5903a7ee0e999a5054cc402b"), "mail" : "mail@google.com", "mdp" : "toto", "firstname" : "firstname", "participants" : 100 } { "_id" : ObjectId("5903ae7952163fd952970ed5"), "mail" : "mail2@google.com", "mdp" : "toto", "firstname" : "firstname", "participants" : 50 } > db.room.find() { "_id" : ObjectId("59043f280d062a4959b69315"), "roomId" : "6733454" }Busco durante mucho tiempo pero, para ser honesto, no sé por qué no funciona, también intento poner los datos de los usuarios en los datos de la sala y copiar/pegar el esquema del usuario en el esquema de la sala, pero no funciona. además.
Si coloco el objeto del modelo de usuario en el enrutador. obtener espacio, funciona, obtengo los datos de los usuarios, por lo que para mí no es un problema de ruta.
De manera predeterminada, Mongoose aplica una función ( utils.toCollectionName() ) al nombre de un modelo para determinar el nombre de colección que Mongoose usará para ese modelo. Para un modelo llamado Room , ese nombre de colección será rooms .
Sin embargo, su colección se llama room (singular), por lo que no coincide allí.
Para solucionar esto, puede especificar explícitamente qué colección debe usarse usando la opción de esquema de collection :
const roomSchema = new mongoose.Schema({ roomId: String, }, { collection : 'room' });El problema es que el nombre de tu colección es room , en singular. El nombre correcto de la colección es rooms , en plural.
Mongoose deduce del nombre del modelo Room que debería haber una colección llamada rooms en la base de datos. Si no lo hay, simplemente falla en silencio y devuelve una matriz vacía.
Si simplemente cambia el nombre de su colección en la base de datos de room a rooms , su código funcionará.
Puede hacerlo con el comando renameCollection .
Gracias chicos, era solo eso y estuvo frente a mí todo este tiempo...
Funciona perfecto con salas de colección y no sala