

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# \$1redact
<a name="redact"></a>

La etapa de `$redact` agregación de Amazon DocumentDB se utiliza para incluir o excluir contenido de los documentos de salida de forma selectiva en función de los valores de los campos especificados. Esto resulta especialmente útil en situaciones en las que necesita controlar la visibilidad de los datos confidenciales en función de los niveles de acceso o los permisos de los usuarios.

**Parámetros**
+ `$cond`: una expresión que da como resultado uno de los campos del documento o `$$DESCEND` para cada uno de ellos. `$$KEEP` `$$PRUNE`
+ `$$KEEP`: conserva el campo actual del documento de salida.
+ `$$PRUNE`: elimina el campo actual del documento de salida.
+ `$$DESCEND`: aplica el `$redact` escenario de forma recursiva al campo actual, que es un objeto o una matriz.

## Ejemplo (MongoDB Shell)
<a name="redact-examples"></a>

En este ejemplo, utilizaremos la `$redact` etapa para filtrar los pedidos en función de su estado y mostrar solo los pedidos con valores de estado específicos.

**Crea documentos de muestra**

```
db.orders.insert([
  { "_id": 1, "status": "shipped", "customer": "Carlos Salazar", "total": 150.00, "date": "2025-01-15" },
  { "_id": 2, "status": "processing", "customer": "Saanvi Sarkar", "total": 89.99, "date": "2025-01-20" },
  { "_id": 3, "status": "cancelled", "customer": "Zhang Wei", "total": 220.50, "date": "2025-01-18" }
])
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $redact: {
      $cond: {
        if: { $in: ["$status", ["shipped", "processing"]] },
        then: "$$KEEP",
        else: "$$PRUNE"
      }
    }
  }
])
```

**Salida**

```
[
  { _id: 1, status: 'shipped', customer: 'Carlos Salazar', total: 150, date: '2025-01-15' },
  { _id: 2, status: 'processing', customer: 'Saanvi Sarkar', total: 89.99, date: '2025-01-20' }
]
```

En este ejemplo, la `$redact` etapa comprueba el valor del `status` campo en cada documento. Si `status` está «enviado» o «procesado», el documento se conserva (`$$KEEP`). De lo contrario, el documento se borra (`$$PRUNE`).

## Ejemplos de código
<a name="redact-code"></a>

Para ver un ejemplo de código para usar el `$redact` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('orders');

  const result = await collection.aggregate([
    {
      $redact: {
        $cond: {
          if: { $in: ['$status', ['shipped', 'processing']] },
          then: '$$KEEP',
          else: '$$PRUNE'
        }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['orders']

    result = list(collection.aggregate([
        {
            '$redact': {
                '$cond': {
                    'if': { '$in': ['$status', ['shipped', 'processing']] },
                    'then': '$$KEEP',
                    'else': '$$PRUNE'
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------