Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

333
Vistas
MongoDB: cómo obtener y mostrar elementos por ID de usuario

Estoy tratando de obtener y mostrar todas las entradas en una colección de 'elementos' que contienen y están enumeradas por un usuario/ID de usuario de una colección de usuarios.

elemento_controlador.js:

 const Item = require('../models/item_schema') const getUserItems = (req, res) => { Item.findById(req.params.userID).populate('categoryID').populate('qualityID').populate('userID') .then((data) => { if (data) { res.status(200).json(data) } else { res.status(404).json(`Item from user id ${req.params.userID} not found.`) } }) } module.exports = { getUserItems }

item_schema.js:

 const { Schema, model} = require('mongoose') const itemSchema = new Schema({ title: { type: String, required: [true, 'Title field is required.'] }, description: { type: String, required: [true, 'Description field is required.'] }, userID: { type: Schema.Types.ObjectId, ref: "User", required: [true, 'User field is required'] }, categoryID: { type: Schema.Types.ObjectId, ref: "Category", required: [true, 'Category field is required'] }, qualityID: { type: Schema.Types.ObjectId, ref: "Quality", required: [true, 'Quality field is required'] }, price: { type: Number }, claimed:{ type: Boolean } }, { timestamps: true }) module.exports = model('Item', itemSchema)

servidor.js:

 const express = require('express') const cors = require('cors') const jwt = require('jsonwebtoken') require('dotenv').config() require('./db')() const { getUserItems } = require('./controllers/item_controller') const port = process.env.PORT || 3000 const app = express() app.use(cors()) app.use(express.json()) app.use((req, res, next) => { if (req.headers && req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') { jwt.verify(req.headers.authorization.split(' ')[1], 'zero_waste_app', (err, decode) => { if (err) req.user = undefined req.use r = decode next() }) } else { req.user = undefined next() } }) // Item Routes app.get('items/user/:userID', getUserItems) app.listen(port, () => { console.log(`Example app listening on port ${port}`) })

Creo que mi problema está en item_controller, probé algunas formas diferentes, como Item.find({userID: userID}) o incluso codificar un ID de usuario en Item.find({userID: '620a6299299db14c46a1eb9f'}) , pero No puedo conseguir que funcione. ¿Alguien sabe qué estoy haciendo mal y cómo puedo solucionarlo?

También hágamelo saber si hay más información o código que pueda dar que sea útil.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Entonces, en primer lugar, si no especifica la clave principal, mongoose generará automáticamente un campo _id en sus colecciones. y este atributo es el que se usa en los métodos "...ById" de la colección, como findById , findByIdAndUpdate , etc.

Ok, ¿cómo resuelve tu problema? Está utilizando el método Item.findById utilizando el valor de un ID de _id userID completamente diferente. Debe usar el método .find pasando el atributo de ID de userID , tampoco necesita encadenar los métodos de populate , puede completar muchos campos en una sola llamada de método.

Intenta cambiar tu controlador a esto:

 const {userID} = req.params; Item .find({userID}) .populate('categoryID qualityID userID') .then((data) => { if (data) { return res.status(200).json(data) } return res.status(404).json(`Item from user id ${req.params.userID} not found.`) })
about 4 years ago · Juan Pablo Isaza Denunciar

0

Me lo imaginé.

 const getUserItems = (req, res) => { Item.find({userID: req.params.userID}).populate('categoryID').populate('qualityID') .then((data) => { if (data) { res.status(200).json(data) } else { res.status(404).json(`Item from user id ${req.params.userID} not found.`) } }) }

también a mi ruta le faltaba un '/' al principio, así que:

 app.get('/items/user/:userID', getUserItems)

y no lo que tenía anteriormente:

 app.get('items/user/:userID', getUserItems)
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda