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

228
Views
Cómo obtener un atributo promedio de una matriz en mongodb (mangoose)

por favor ayúdenme, estoy tratando de acercarme a los vendedores por entrada de ubicación de los usuarios y luego ordenar por calificación promedio. ¿Es posible? Este es el fragmento del modelo. El modelo tiene una variedad de críticas.

 const sellerSchema = new mongoose.Schema({ _id: Mongoose....ObjectId //... reviews: [ { by: { type: mongoose.Schema.Types.ObjectId, ref: "User", }, title: { type: String, }, message: { type: String, }, rating: Number, imagesUri: [{ String }], timestamp: { type: Date, default: Date.now, }, }, ], });

Entonces mi agregado tengo:

 const seller = await Seller.aggregate( [ { $geoNear: { near: { type: "Point", coordinates: [longitude, latitude], }, distanceField: "distance", spherical: true, maxDistance: radius, }, }, rating_minimum ? { $match: { rating: { $gt: rating_minimum } } } : {}, {$limit: limit}, ]);

Estaba pensando en $group y crear avgReview, y luego ordenarlos por revisiones algo así como:

 {$group:{averageReviews: { $avg: "$reviews.rating"}}, {$sort: { averageReviews: 1 } }, {$limit: limit}
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Dado que las revisiones están ordenadas por documento, en lugar de $group que recopila documentos, puede usar $reduce para calcular la calificación promedio:

 { $addFields: { ratingSum: { $reduce: { initialValue: 0, input: "$reviews", in: {$sum: ["$$value", "$$this.rating"]} } } } }, { $addFields: { "averageReviews": {"$divide": ["$ratingSum", {$size: "$reviews"}] } } }, {$sort: { averageReviews: 1 } }, {$limit: limit}

Como puede ver en este ejemplo de patio de recreo.

No estoy seguro de lo que está tratando de limitar para 3, pero si son los resultados finales, 3 vendedores, entonces lo está usando correctamente.

Por cierto, a su esquema de vendedor le falta la ubicación del vendedor, necesaria para $geoNear .

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!