定义
兼容性
可以使用 $cond 查找托管在以下环境中的部署:
- MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
$cond表达式采用以下两种语法:
{ $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case> } }
或者:
{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }
$cond需要任一语法的所有三个参数 ()。if-then-else
如果<boolean-expression> 的计算结果为true ,则$cond 计算并返回<true-case> 表达式的值。否则,$cond 计算并返回<false-case> 表达式的值。
参数可以是任何有效表达式。
提示
示例
本页上的示例使用sample_mflix示例数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载示例数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
以下聚合操作使用$cond imdb.rating95.99表达式为每部电影分配租赁价格。该操作将 大于或等于 的电影定价为 。该操作将所有其他电影定价为3.99 :
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 } ]
以下操作使用$cond 表达式的大量语法并返回相同的结果:
db.movies.aggregate( [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, rentalPrice: { $cond: [ { $gte: [ "$imdb.rating", 9 ] }, 5.99, 3.99 ] } } } ] )