Definição
Compatibilidade
Você pode utilizar o $cond para implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
A expressão tem uma de duas $cond sintaxes:
{ $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case> } }
Ou:
{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }
$cond exige todos os três argumentosif-then-else () para qualquer sintaxe.
Se o <boolean-expression> avaliar true para, então avalia e retorna o valor $cond da <true-case> expressão. Caso contrário, $cond avalia e retorna o valor da <false-case> expressão.
Os argumentos podem ser qualquer expressãoválida.
Dica
Exemplos
Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
A seguinte operação de agregação utiliza a expressão para atribuir um preço de aluguel a cada filme. A operação cobra filmes com $cond um imdb.rating maior ou igual a 9 5.99em. A operação cobra todos os outros filmes 3.99 em:
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 } ]
A operação a seguir usa a sintaxe de array da expressão e retorna os mesmos $cond resultados:
db.movies.aggregate( [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, rentalPrice: { $cond: [ { $gte: [ "$imdb.rating", 9 ] }, 5.99, 3.99 ] } } } ] )