No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
13 Hrs
8 Min
55 Seg

Funciones personalizadas

15/21
Recursos

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

En el caso te aparezca el error: "$function not allowed in this atlas tier" Investigando sobre tema en la documentación de MongoDB, se puede ver las acciones no respaldadas o "Unsuported Actions". Actualmente, las instancias sin servidor no admiten las siguientes acciones: Usar JavaScript del lado del servidor, como $where, $function, $accumulator y map-reduce. Puedes revisar esta información en la siguiente link: <https://www.mongodb.com/docs/atlas/reference/serverless-instance-limitations/> Seguramente en el momento en que hago el curso, utilizar funciones sea por medio de una versión más alta de MongoDB o de paga. Adjunto una solución similar sin "$function" para poder suplir la consulta de esta clase: ```js use('sample_airbnb') db.listingsAndReviews.aggregate([ { $addFields:{ wordCount:{ $cond: { if: { $eq: ["$descripcion", null] }, then: 0, else: { $size: { $split: [{ $ifNull: ["$descripcion", ""] }, " "] } } } } } }, { $group:{ _id: "$property_type", averageWordCount:{$avg: "$wordCount"} } } ]) ```

El ejemplo lo ejecute localmente en mongoDB. Para eso tuve que crear una base de datos e importar todas las colecciones de mongoDb atlas.

var db=db.getSiblingDB("sample_airbnb")

var resultado=db.listingsAndReviews.aggregate(
    {
        $addFields:{
            wordCount:{
                $function:{
                    body: function(description){
                        if(description){
                            var words = description.split('');
                            return words.length;
                        } else{
                            return 0
                        }
                    },
                    args:["$description"],
                    lang:"js"
                }
            }
        }
    },
    {
        $group:{
            _id:"$property_type",
            averageWordCount:{ $avg: "$wordCount"}
        }
    },
    {
        $count: "cantidad",
      }

)

print(resultado)

#Resultado
[ { cantidad: 36 } ]
Dejo mi aporte: ```js //Crear una funcion para contar la cantidad de palabras que la gente usa en las descripciones use('sample_airbnb') db.listingsAndReviews.aggregate([ { $addFields: { contadorPalabras: { $cond: { if: { $ne: ["$description", null] }, then: { $size: { $split: ["$description", " "] } }, else: 0 } } } }, { $group: { _id: "$property_type", promedioDePalabras: { $avg: "$contadorPalabras" } } }, { $project: { _id: 1, promedioDePalabras: { $round: ["$promedioDePalabras", 2] } } }, { $sort: { promedioDePalabras: -1 } } ]) ```
Si tampoco me dejo con function, mi alternativa a continuación://Crear una funcion para contar la cantidad de palabras que la gente usa en las descripcionesuse('sample\_airbnb') db.listingsAndReviews.aggregate(\[  {    $addFields: {      contadorPalabras: {        $cond: {          if: { $ne: \["$description", null] },          then: { $size: { $split: \["$description", " "] } },          else: 0        }      }    }  },  {    $group: {      \_id: "$property\_type",      promedioDePalabras: { $avg: "$contadorPalabras" }    }  },  {    $project: {      \_id: 1,      promedioDePalabras: { $round: \["$promedioDePalabras", 2] }    }  },   {    $sort: {      promedioDePalabras: -1    }  } ]) ```js //Crear una funcion para contar la cantidad de palabras que la gente usa en las descripciones use('sample_airbnb') db.listingsAndReviews.aggregate([ { $addFields: { contadorPalabras: { $cond: { if: { $ne: ["$description", null] }, then: { $size: { $split: ["$description", " "] } }, else: 0 } } } }, { $group: { _id: "$property_type", promedioDePalabras: { $avg: "$contadorPalabras" } } }, { $project: { _id: 1, promedioDePalabras: { $round: ["$promedioDePalabras", 2] } } }, { $sort: { promedioDePalabras: -1 } } ]) ```
use('sample_airbnb')

db.listingsAndReviews.aggregate([
  {
    $addFields:{
      wordCount: {
        $function:{
          body:function(descripcion){
            if(descripcion){
              const words = descripcion.split(' ')
              return words.length
            }else{
              return 0
            }
          },
          args: ["$description"],
          lang: "js"
        }
      }
    }
  },
  {
    $group: {
      _id: "$propery_type",
      averageWordCount: {$avg: "$wordCount"}
    }
  }
])