MongoDB聚合运算符:$toBool
$toBool聚合运算符将指定的值转换为布尔类型boolean。
语法
{
$toBool:
}
$toBool接受任何有效的表达式。
$toBool是$convert表达式的简写形式:
{ $convert: { input: , 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 }
到此这篇关于MongoDB聚合运算符:$toBool的文章就介绍到这了,更多相关MongoDB聚合运算符内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!
