Necesito encontrar y unirme a otra colección para obtener los datos comerciales de la colección comercial y la descripción del perfil que se guarda en la colección de perfiles. Última versión de nodejs y mongoose.
businesses = await Business.find({}, "business_id name industry") .limit(limit * 1) .skip((page - 1) * limit) .exec();Ese es el código, que necesito más tarde también para la paginación.
Ahora encontré una solución con $Lookup en Mongoose. mi código parece
Business.aggregate([{ $lookup: { from: "profiles", // collection name in db localField: "business_id", foreignField: "business_id", as: "profile" } }]).exec(function(err, profile) { console.log(profile[0]); });El negocio y el perfil se guardan con business_id en un campo. Entonces no puedo trabajar con _id de Mongoose. Nunca antes trabajé con mangosta y dos colecciones.
El problema ahora es que el perfil[0] no está conectado al negocio correcto. Entonces, el perfil es otro a partir del hallazgo comercial anterior.
Necesito encontrar las últimas 10 empresas y unirme a otra colección y capturar también los detalles del perfil. Lo que hago mal aquí, ¿alguien tiene un ejemplo de este comportamiento?
Utilice https://mongoosejs.com/docs/populate.html
Como en su caso, no tiene ObjectId aquí, puede usar populate-virtuals
Hasta ahora, solo ha rellenado en función del campo _id. Sin embargo, a veces esa no es la elección correcta. En particular, las matrices que crecen sin límite son un antipatrón de MongoDB. Usando mongoose virtuals, puede definir relaciones más sofisticadas entre documentos.
const BusinessSchema = new Schema({ name: String }); BusinessSchema.virtual('profile', { ref: 'Profile', // The model to use localField: 'business_id', // Find people where `localField` foreignField: 'business_id', // is equal to `foreignField` // If `justOne` is true, 'members' will be a single doc as opposed to // an array. `justOne` is false by default. justOne: false, options: { sort: { name: -1 }, limit: 5 } // Query options, see "bit.ly/mongoose-query-options" });