Saltar al contenido

cómo agrupar en mongoDB y devolver todos los campos en el resultado

Esta crónica fue probado por nuestros especialistas así se garantiza la veracidad de este enunciado.

Solución:

Puede utilizar la siguiente consulta de agregación.

$$ROOT para mantener el documento completo por cada nombre seguido de $replaceRoot para promocionar el documento a la parte superior.

db.col.aggregate([
  "$group":"_id":"$name","doc":"$first":"$$ROOT",
  "$replaceRoot":"newRoot":"$doc"
])

Cuando agrupa datos en cualquier base de datos, significa que desea realizar una operación acumulada en el campo requerido y el otro campo que no se incluirá en la operación acumulada se usará en grupo como

 db.collection.aggregate([
 $group: 
   _id:  field1: "", field1: "" ,
   acc:  $sum: 1 
 ]

aquí en el objeto _id contendrá todos los demás campos que desea retener.

para tus datos puedes probar esto

db.collection.aggregate([
    $group: 
        _id: "$name",
        rating:  $first: "$rating" ,
        tags:  $first: "$tag" ,
        docid:  $first: "$_id" 
    
,

    $project: 
        _id: "$docid",
        name: "$_id",
        rating: 1,
        tags: 1
    
])

La solución de user2683814 funcionó para mí, pero en mi caso, tengo un acumulador de contador cuando reemplazamos el objeto newRoot, falta el campo de conteo en la etapa final, así que he usado $mergeObjects operador para recuperar mi campo de conteo.

db.collection.aggregate([
 
  $group: 
    _id: '$product',
    detail:  $first: '$$ROOT' ,
    count: 
      $sum: 1,
    ,
  ,
,

  $replaceRoot: 
    newRoot:  $mergeObjects: [ count: '$count' , '$detail'] ,
  ,
])

Si guardas alguna cuestión o forma de avanzar nuestro artículo eres capaz de escribir una reseña y con gusto lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *