Tengo un problema y realmente me vendría bien un poco de ayuda. Teníamos una aplicación que usaba MySQL y estamos cambiando a MongoDB. Estamos usando Node.js con Express y tenemos MongoDB y Mongoose para la base de datos.
Hemos consultado la documentación de MongoDB y Mongoose y buscado preguntas relacionadas con Stack Overflow, pero parece que nos falta algo.
Esto es lo que tenemos en app.js:
var mongo = require('mongodb'); var mongoose = require('mongoose'); var db = mongoose.connect('mongodb://localhost:27017/DBName');Este es nuestro modelo de usuarios.js
var db = require('mongoose'); var Schema = db.Schema; var userSchema = new Schema({ u_id : Number, u_name : { type: String, required: true }, u_lastname : String }); module.exports = db.model('user', userSchema);Y esto es lo que usamos en el controlador de usuario:
var User = require('../models/usersModel'); User.find({}, function(err, users) { if (err) throw err; console.log("Found users: ", users); });El archivo console.log(db.connection.readyState); dice que se esta conectando Y User.find() no parece dar un error, sino que da una matriz vacía/indefinida.
Realmente agradeceríamos si alguien pudiera decirnos lo que pasamos por alto.
Gracias por adelantado.
No estoy seguro de por qué alguien pensó que esto era una buena idea, pero esto es lo que hace la mangosta:
Mongoose por defecto produce un nombre de colección al pasar el nombre del modelo al método utils.toCollectionName. Este método pluraliza el nombre.
Como beneficio adicional, está en minúsculas, lo que apesta cuando tienes nombres de tablas con la convención de mayúsculas y minúsculas.
Puede solucionarlo configurando la siguiente opción en su esquema:
var userSchema = new Schema({..}, { collection: 'user' });Más sobre esto aquí .
Su llamada find () me parece bien.
¿Estás seguro de que hay usuarios en tu colección? ¿La creación de un nuevo usuario arroja un error que no notó? Tal vez pueda verificar que efectivamente hay usuarios en su colección abriendo una terminal y escribiendo:
> mongo > use DBName > show collections > db.user.find()Y eso devolverá todos los usuarios que existen.
En: iuliu.net: Obtenemos ambos errores, el primero fue [] y el segundo no está definido.
En JohnnyHK: Gracias por su envío, pero estamos seguros de que la colección de usuarios está en esta base de datos y que las propiedades que buscamos existen.
En Juuso: gracias por sus comentarios, pero en el terminal mongo obtuvimos la salida de la colección.
Alguien nos hizo una pregunta crítica si intentábamos esto con el monje. Instalamos monk y encontramos la base de datos, la colección y obtuvimos el resultado. Todavía no estamos seguros de cuál fue el problema con Mongoose, pero con monk funciona.
Gracias chicos por sus comentarios y tiempo.