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

229
Views
Cómo sumar un campo interno de mongodb y empujarlo durante la agrupación usando MongoTemplate

Puedo usar la suma dentro de la operación de inserción en una consola MongoDB. Sin embargo, no entiendo cómo puedo hacer lo mismo con MongoTemplate.

 $group : { _id: "$some_id", my_field: { $push : {$sum: "$my_field" }} }

El código que estoy usando para esto es algo como:

 Aggregation aggregation = Aggregation.newAggregation( match(matchingCriteria), group("some_id") .count() .as("count") .push("my_field") .as("my_field") project("some_id", "count", "my_field")); AggregationResults<MyModel> result = mongoTemplate.aggregate(aggregation, "my_collection", MyModel.class);

La cosa es que quiero la suma de my_field pero viene como una matriz de my_field aquí (ya que estoy usando directamente el empuje). Puedo lograr lo mismo usando la suma anterior dentro de la operación de inserción. Pero no puedo usar eso para MongoTemplate. Mi aplicación está en Spring Boot. También busqué en los documentos para estos métodos, pero no pude encontrar mucho.

Además, intenté usar directamente .sum() también en el campo (sin usar el empuje), pero eso no funciona para mí ya que my_field es un objeto interno, y no es un número sino una matriz de números después de la agrupación. Es por eso que necesito usar la combinación push y sum.

Cualquier ayuda con respecto a esto es apreciada. Gracias por adelantado.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Pude hacer que esto funcionara usando el siguiente código:

 Aggregation aggregation = Aggregation.newAggregation( match(allTestMatchingCriteria), project("some_id") .and(AccumulatorOperators.Sum.sumOf("my_field")) .as("my_field_sum") group("some_id") .count() .as("count") .push("my_field_sum") .as("my_field_sum"), project("some_id", "count", "my_field_sum")); AggregationResults<MyModel> result = mongoTemplate.aggregate(aggregation, "my_collection", MyModel.class);

Usé AccumulatorOperators.Sum en la etapa de proyección y sumé los campos internos y obtuve el resultado deseado. Luego pasé esto a la etapa de agrupación donde hice la agregación de conteo ya que también necesitaba esos datos y luego tuve que proyectar todos los datos generados para recopilarlos como salida.

over 4 years ago · Santiago Trujillo 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!