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

405
Views
¿Cómo hacer una unión interna con mongodb, mongoose y nestjs?

Tengo un sistema con mongodb genéricoizado por mongoose en nest js, ¿cómo traigo datos de clientes y productos en la misma solicitud?

en la base de datos los datos son así:

 "_id": "621d2137abb45e60cf33a2d4", "product_id": [ "621cedbf79d68fb4689ef0cb", "621cedbf79d68fb4689ef0cb", "621cedbf79d68fb4689ef0cb" ], "client_id": "621d19f890ec693f1d553eff", "price": 597, "__v": 0

mi servicio:

 findAll() { return this.sealsModel.find().exec(); }

De esta manera no funcionó:

 findAll() { var a = this.sealsModel.find().exec() return this.sealsModel.aggregate([{ $lookup: { from: 'seals', localField: 'client_id', foreignField: '_id', as: 'client' } }]) .exec() }

pero devuelve esto:

 "_id": "621d3e0a1c3bcac85f79f7cc", "product_id": [ "621cedbf79d68fb4689ef0cb", "621cedbf79d68fb4689ef0cb", "621cedbf79d68fb4689ef0cb" ], "client_id": "621d19f890ec693f1d553eff", "price": 597, "__v": 0, "client": []
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Una alternativa al operador $lookup de Mongo es la función de populate de Mongoose. Para usarlo correctamente, primero debe actualizar su modelo.

Debería tener un modelo de cliente que se vea así:

 // /models/Client.js const mongoose = require("mongoose"); const clientSchema = mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, ... // the rest of your fields }); module.exports = mongoose.model('Client', clientSchema);

La clave para notar aquí es la última línea. Se hace referencia al modelo como "Cliente".

El cambio que tienes que hacer es principalmente en tu modelo Seal :

 // /models/Seal.js const mongoose = require("mongoose"); const sealSchema = mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, client_id: { type: mongoose.Schema.Types.ObjectId, ref: "Client" // We use the same name we gave to our client model in the last file } }); module.exports = mongoose.model('Seal', sealSchema);

Luego, en su código, debería poder usar:

 const Seal = require("YOUR_PATH/models/Seal.js") Seal.find().populate("client_id")

Una nota al margen importante: su modelo muestra la ID de mongo como una cadena

 "_id": "621d3e0a1c3bcac85f79f7cc", "client_id": "621d19f890ec693f1d553eff", <---

Asegúrese de que el campo client_id sea del tipo ObjectId o no funcionará:

 "client_id": ObjectId("621d19f890ec693f1d553eff")
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!