Quantcast
Channel: ¿Es posible hacer la media de todos los valores de una coleccion relacionada con ObjectId? - Stack Overflow en español
Viewing all articles
Browse latest Browse all 2

Respuesta de pandres95 en ¿Es posible hacer la media de todos los valores de una coleccion relacionada con ObjectId?

$
0
0

El caso es que @Diego está en lo correcto.

Un par de apuntes:

  • No es generalmente buena práctica hacer un array de puntuaciones en el modelo de vino, porque termina eventualmente uno sin espacio (recuerda que un documento no puede exceder el tamaño determinado por su BSON), y esto no es bueno si el vino va a tener…¿20.000 puntuaciones? Aparte de todo lo anterior, se hará más fácil hacer un aggregator desde un modelo y no a nivel de documentos. En ese caso en el modelo de puntuación es donde se hace la referencia al vino. Caso diferente al de los comentarios, donde por norma general no son muchos, pero si lo son, la misma cosa.
  • Lo normal, programar en un solo idioma, eso de combinar inglés con español a veces es un tanto raro. Además, usar camelCase en lugar de snake_case, ya que bueno…¡es Javascript!

Ahora si, empecemos:

En el archivo del modelo Wine

const mongoose = require('mongoose'),     Schema   = mongoose.Schema;let wineSchema = new Schema({    name: {        type: String,        required: true    },    code: {        type: String,        required: true    },    type: {        type: String,        enum: [ 'Tinto', 'Rosado', 'Blanco' ],        required: true    },    winery: {        type: String,        required: true    },    grapeType: {        type: String,        required: true    },    year: {        type: Number,        required: true    },    alcohol: {        type: Number,        required: true    },    comments: [{        type: Schema.Types.ObjectId,        ref: 'Comment'    }]});module.exports = new mongoose.model('Wine', wineSchema);

En el archivo del modelo Rate

const mongoose = require('mongoose'),     Schema   = mongoose.Schema,     ObjectId = mongoose.Types.ObjectId;let rateSchema = new Schema({    user: {        type: Schema.Types.ObjectId,        ref: "User",        required: true    },    wine: {        type: Schema.Types.ObjectId,        ref: "Wine",        required: true    },    rate: {        type: Number,        required: true    }});rateSchema.statics.avg = function(wineId){    return new Promise((resolve, reject) => {        this.aggregate([{            $match: {                wine: new ObjectId(wineId)            }        }, {            $group: {                _id: '$wine',                rate: {                    $avg: '$rate'                }            }        }], (error, results) => {            if(error) return reject(error);            return resolve(results);        });    });};module.exports = mongoose.model('Rate', rateSchema);

Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images