MongoDB聚合运算符:$toBool
文章目录
- MongoDB聚合运算符:$toBool
- 语法
- 使用
- 举例
$toBool
聚合运算符将指定的值转换为布尔类型boolean。
语法
{$toBool: <expression>
}
$toBool
接受任何有效的表达式。
$toBool
是$convert
表达式的简写形式:
{ $convert: { input: <expression>, to: "bool" } }
使用
下表列出了可转换为布尔值的类型:
输入类型 | 规则 |
---|---|
Array | 返回ture |
Binary data | Returns true |
Boolean | 直接返回 |
Code | 返回true |
Date | 返回true |
Decimal | 0返回false,非0返回true |
Double | 0返回false,非0返回true |
Integer | 0返回false,非0返回true |
JavaScript | 返回true |
Long | 0返回false,非0返回true |
MaxKey | 返回true |
MinKey | 返回true |
Null | 返回null |
Object | 返回true |
ObjectId | 返回true |
Regular expression | 返回true |
String | 返回true |
Timestamp | 返回true |
下表列出了一些转换为布尔值的示例:
示例 | 结果 |
---|---|
{$toBool: false} | false |
{$toBool: 1.99999} | true |
{$toBool: NumberDecimal("5")} | true |
{$toBool: NumberDecimal("0")} | false |
{$toBool: 100} | true |
{$toBool: ISODate("2018-03-26T04:38:28.044Z")} | true |
{$toBool: "false"} | true |
{$toBool: ""} | true |
{$toBool: null} | null |
举例
使用下面的脚本创建orders
集合:
db.orders.insertMany( [{ _id: 1, item: "apple", qty: 5, shipped: true },{ _id: 2, item: "pie", qty: 10, shipped: 0 },{ _id: 3, item: "ice cream", shipped: 1 },{ _id: 4, item: "almonds", qty: 2, shipped: "true" },{ _id: 5, item: "pecans", shipped: "false" }, //注意:所有的字符串都转换为true{ _id: 6, item: "nougat", shipped: "" } //注意:所有的字符串都转换为true
] )
下面是对订单集合orders
的聚合操作,先将已发货的订单shipped
转换为布尔值,然后再查找未发货的订单:
//定义shippedConversionStage阶段,添加转换后的发货标志字段`convertedShippedFlag`
//因为所有的字符串都会被转换为true,所以要对字符串"false"做个特殊处理
shippedConversionStage = {$addFields: {convertedShippedFlag: {$switch: {branches: [{ case: { $eq: [ "$shipped", "false" ] }, then: false } ,{ case: { $eq: [ "$shipped", "" ] }, then: false }],default: { $toBool: "$shipped" }}}}
};// 定义文档过滤阶段,过滤出没有发货的订单unshippedMatchStage = {$match: { "convertedShippedFlag": false }
};db.orders.aggregate( [shippedConversionStage,unshippedMatchStage
] )
执行的结果为:
{ "_id" : 2, "item" : "pie", "qty" : 10, "shipped" : 0, "convertedShippedFlag" : false }
{ "_id" : 5, "item" : "pecans", "shipped" : "false", "convertedShippedFlag" : false }
{ "_id" : 6, "item" : "nougat", "shipped" : "", "convertedShippedFlag" : false }