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

162
Vistas
node.js express solo devuelve elementos relacionados con el usuario

Solo quiero devolver las transacciones que pertenecen al usuario actualmente conectado. Guardo el usuario dentro del encabezado de cada solicitud. En cada oficio tengo guardado el creador.

Mi método GET se ve así:

 exports.getTrades = (req, res, next) => { const tradeQuery = Trade.find(); let fetchTrades; tradeQuery .then((trades) => { fetchTrades = trades.filter((t) => t.creator._id === req.userData.userId); <--- return; }) .then((count) => { res.status(200).json({ message: "Trades fetched successfully!", trades: fetchTrades, }); }) .catch((error) => { res.status(500).json({ message: "Fetching trades failed!", }); }); };

Intenté registrar en la consola los dos atributos que comparo dentro de mi filtro manualmente, y en realidad hay intercambios en los que ambos son iguales. Sin embargo, fetchTrades permanece vacío.

Realmente agradecería algunas ideas.

Aquí están los dos modelos:

usuario.js:

 const mongoose = require("mongoose"); const uniqueValidator = require("mongoose-unique-validator"); const userSchema = mongoose.Schema({ email: { type: String, required: true, unique: true }, password: { type: String, required: true }, }); userSchema.plugin(uniqueValidator); module.exports = mongoose.model("User", userSchema);

comercio.js:

 const mongoose = require("mongoose"); const tradeSchema = mongoose.Schema({ pair: { type: String, required: true }, type: { type: String, required: true }, resultAmount: { type: Number, required: true }, date: { type: Date, required: true }, time: { type: Date, required: true }, creator: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true, }, leverage: { type: Number }, entry: { type: Number }, exit: { type: Number }, lessonLearned: { type: String }, }); module.exports = mongoose.model("Trade", tradeSchema);

EDITAR: así es como se ve el comercio:

 { _id: 6245bf565043276fb456cb6a, pair: 'BTCUSD', type: 'long', resultAmount: 239, time: 2022-03-22T23:00:00.000Z, date: 2022-03-31T14:48:28.916Z, creator: 62409c68e17cae2d68a99b3b, leverage: 20, entry: 1.2321, exit: 1.2377, lessonLearned: 'I was good man', __v: 0 }

EDIT2: Gracias a @vicki. Tuve que usar "==" en lugar de "===" dentro de mi función de filtro.

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

0

Hay un error en el uso de la función de filtro. No devuelve nada en lugar de entradas coincidentes.

 tradeQuery .then((trades) => { fetchTrades = trades.filter((t) => t.creator._id === req.userData.userId); return; })

Este es su uso. cambiarlo como

 tradeQuery .then((trades) => { fetchTrades = trades.filter((t) => return t.creator._id === req.userData.userId); })

Esto posiblemente debería solucionar su problema. Agregar un fragmento js

 let trades = [{ "id": 1, "name": 'asd' }, { "id": 2, "name": 'qwe' }, { "id": 1, "name": 'efg' }] let fetchTrades { fetchTrades = trades.filter((t) => { t.id === 1; return }) } console.log('improper usage',fetchTrades) { fetchTrades = trades.filter((t) => { return t.id === 1; }) } console.log('Proper usage',fetchTrades)

EDITAR: Puede haber problemas al comparar ObjectID, usar === también verificará el tipo. Por lo tanto, es recomendable usar t.creator._id.equals(req.userData.userId) o == . Como señaló @ApoorvaChikara, no use la declaración de devolución dentro de la función de filtro.

about 4 years ago · Juan Pablo Isaza Denunciar

0

lo que me ayudó a realizar el filtrado es el método mongoose find(). puede pasar un campo que desee hacer coincidir con un ID de usuario. para hacer esto, implementé un archivo de repositorio que exporta todas las funciones de consulta de db. en mi caso, quiero obtener todos los períodos de un usuario específico.

mi period.repo.ts se ve así:

 // period.repo.ts import Period from '../models/period.model'; class PeriodRepository { findAllFromUser(userId: String) { return Period.find({ userId: userId }); } } export default new PeriodRepository();

luego, en mi archivo de servicio que contiene mi lógica comercial para el backend, importo y uso el archivo de repositorio de esta manera:

 // period.service.ts import PeriodRepository from './period.repository'; getCycle(req, res) { let cycleLength = 1; let lastPeriod; PeriodRepository.findAllFromUser(req.params.userId) .then((periods) => { cycleLength = periodHelper.calcAverageCycleLength(periods, 0); if (lastPeriod?.endDate) { return res.status(200).json({ message: 'predictions fetched', cycleLength: cycleLength, }); } else { return res.status(200).json({ message: 'period is active', remainingDaysPeriod: 0, remainingDaysOvaluation: 0, }); } }) .catch((error) => { return res.status(500).json({ message: 'fetching periods failed', }); }); }

de esta manera solo consulto los documentos que pertenecen al usuario seleccionado.

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