Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

339
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!