No tienes acceso a esta clase

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

Evaluando expresiones con $redact

16/21
Recursos

Aportes 4

Preguntas 0

Ordenar por:

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

use('sample_airbnb')

db.listingsAndReviews.aggregate([
  {
    $redact: {
      $cond:{
        if: { $gte: ["$review_scores.review_scores_rating", 95] },
        then:"$$KEEP",
        else: "$$PRUNE"
      }
    }
  },
  {
    $count: "count"
  }
])
La diferencia entre usar `$$KEEP` y `$$DESCEND` en el contexto del código que proporcionaste radica en cómo se procesan los documentos que no cumplen con la condición del operador `$cond`. **$$KEEP:** * **Mantén el documento:** Si la calificación de Airbnb es inferior a 90, pero se cumple alguna otra condición en la etapa de `$redact` posterior, el documento se conservará. * **Ejemplo:** Si el documento tiene una calificación de 85, pero también tiene una reseña que menciona "ubicación perfecta", el documento se conservará si la etapa posterior de `$redact` filtra por documentos con "ubicación perfecta". **$$DESCEND:** * **Omite el documento:** Si la calificación de Airbnb es inferior a 90, el documento se omite y no se procesa en etapas posteriores de la tubería de agregación. * **Ejemplo:** Si el documento tiene una calificación de 85, no se procesará en la etapa posterior de `$count`, incluso si la etapa filtrara por documentos con una calificación superior a 80. En resumen, `$$KEEP` conserva el documento para su procesamiento posterior, incluso si no cumple con la condición actual, mientras que `$$DESCEND` lo omite de inmediato.

solución al reto:

Utilizando $redact:

var db=db.getSiblingDB("sample_airbnb")


var resultado = db.listingsAndReviews.aggregate([
    {
        $redact: {
          //condicion
          $cond: {
            if:{$gte:["$review_scores.review_scores_rating", 95]},
            then: "$$KEEP",
            else: "$$PRUNE"
          }
        }
    },
    {
        $count:"cantidad_redact"
    }
]
);

print(resultado)

Utilizando $match:

var db=db.getSiblingDB("sample_airbnb")

var resultado1 = db.listingsAndReviews.aggregate([
    {
        $match: {
            "review_scores.review_scores_rating": { $gte: 95},
        }
    },
    {
        $count:"cantidad_match"
    }
]
);
print(resultado1)

Ejecución y Resultado:

PS D:\Usuarios\Aggregations> mongosh --quiet ./playground-2.redact.mongodb.js
[ { cantidad_redact: 2287 } ]
[ { cantidad_match: 2287 } ]

Desventajas en el uso de $redact:

  • es más costoso que el operador $match
  • Solo excluye a partir de la etapa de la función aggregate donde se utilice $redact.