定义
兼容性
可以使用 $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.rating 大于或等于 9 的电影定价为 5.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 ] } } } ] )