Cómo la suma de los valores de campo en las colecciones de la mangosta

0

Pregunta

const PostSchema = new mongoose.Schema({
  title: {
    type: String,
  },
  text: {
    type: String,
    required: true,
  }
  postedBy: {
    type: mongoose.Schema.ObjectId,
    ref: "User",
  }
  likes: [{
    type: mongoose.Schema.ObjectId,
    ref: "User",
  }, ],
  likeLength: {
    type: Number,
    default: 0
  }
});


let totalLikes = Post.aggregate([{
    $match: {
      postedBy: req.profile._id,
    },
  },
  {
    $group: {
      _id: "$postedBy",
      total_count: {
        $sum: "$likeLength"
      }
    }
  },
])

Yo quería suma likeLength valores en todos los Post de colecciones de filtrado por postedBy campo y obtener la suma del resultado que tipo de número entero. Traté de totalLikes función de arriba, pero no podían hacerlo.

javascript mongodb mongoose node.js
2021-11-23 17:31:51
2
0

Tal vez esto puede ayudar a

  • hacer que la cadena de req.profile._id ObjectId
  • grupo null todos son de la misma postedBy así que todo documento que se aprobó en el grupo. (grupo null significa que todos los de la colección 1 grupo) (su grupo estaba bien, pero esto es más sencillo)
  • anular la _id para obtener como resultado [{"total_count" : 20}] por ejemplo

*antes de la prueba de la prueba en grupo si $match obras y documentos que se encuentran.

let totalLikes = Post.aggregate([{
    $match: {
      postedBy: mongoose.Types.ObjectId(req.profile._id),
    }
  },
  {
    $group: {
      _id: null,
      total_count: {
        $sum: "$likeLength"
      }
    }
  },
  {"$unset": ["_id"]}
])
2021-11-23 18:51:11

Muchas gracias . Yo también lo hizo con esta función $grupo: { _id: "$postedBy",sumLikes: {$suma: {$tamaño: "$me gusta" }}} Pero, ¿cómo obtener estos datos , me refiero entero , y enviar el número de cliente?
jdee

las consultas siempre devuelve las matrices de los documentos (o matriz vacía si no se encuentra nada). El más cercano que usted puede conseguir es este [{total_count : 20 }] si desea que este puede quitar el _id con project o unset
Takis _

Muchas gracias y estoy realmente lo siento por perder su tiempo, pero creo que no es mi problema. Yo uso reaccionar en el cliente y cuando llego a estos datos desde el servidor me encuentro con este {_pipeline: Array(3), options: {...}} entonces, ¿cómo puedo llegar a mi número :). Sin embargo, probablemente me tenga que hacer una nueva pregunta para la que, debido a la página web del formato.
jdee

agregaciones de retorno de los cursores, y tienen muchos métodos, uno simple es toArray() y a partir de ahí se obtiene con js después. consulte la documentación de la mangosta
Takis _

en realidad yo uso estos butget ningún resultado 1) de la consola.log(stats?._pipeline?.mapa((elemento)=> ( <p > {item[1]} </p>) y 2) las estadísticas._pipeline[1]
jdee

si usted tiene problemas con js, tal vez pedir nueva pregunta , puedo usar java/clojure en general, pero muchas personas pueden ayudar
Takis _

Gracias voy a mirar eso y le pregunte nueva pregunta si no podría hacer . Gracias de nuevo
jdee
0

La solución para esto es la siguiente. Con el resultado[0], el resultado será un objeto con sumLikes de la propiedad.

aggregate([
      {
        $match: {postedBy: req.profile._id}
      },
      {
        $group: {
          _id: null,
          sumLikes: {
            $sum: "$likeLength",
          },
        },
      },
      { $unset: ["_id"] },
    ], function(err, result) {
      if(err){
        console.log(err)
      }else{
        res.json(result[0])
      }})

2021-11-23 18:35:38

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................