Definición
Compatibilidad
Puedes usar $cond para implementaciones alojadas en los siguientes entornos:
- MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
La expresión tiene una de dos $cond sintaxis:
{ $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case> } }
O:
{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }
$cond requiere los tres argumentosif-then-else () para cualquiera de las sintaxis.
Si se <boolean-expression> evalúa true como, entonces $cond se evalúa y devuelve el valor de la <true-case> expresión. De lo contrario, se evalúa y devuelve el valor de$cond la <false-case> expresión.
Los argumentos pueden ser cualquier expresión válida.
Tip
Ejemplos
Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.
La siguiente operación de agregación utiliza la expresión para asignar un precio de alquiler a cada película. La operación asigna el precio a las películas con $cond un imdb.rating mayor o igual 9 5.99que. La operación asigna el precio a todas las demás 3.99 películas:
db.movies.aggregate( [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, rentalPrice: { $cond: { if: { $gte: [ "$imdb.rating", 9 ] }, then: 5.99, else: 3.99 } } } } ] )
[ { _id: ..., title: 'Baseball', rentalPrice: 5.99 }, { _id: ..., title: 'Centennial', rentalPrice: 3.99 } ]
La siguiente operación utiliza la sintaxis de matriz de la $cond expresión y devuelve los mismos resultados:
db.movies.aggregate( [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, rentalPrice: { $cond: [ { $gte: [ "$imdb.rating", 9 ] }, 5.99, 3.99 ] } } } ] )