MongoDB聚合运算符:$toBool

MongoDB聚合运算符:$toBool


$toBool聚合运算符将指定的值转换为布尔类型boolean。

语法

{
   $toBool: <expression>
}

$toBool接受任何有效的表达式。

$toBool$convert表达式的简写形式:

{ $convert: { input: <expression>, to: "bool" } }

使用

下表列出了可转换为布尔值的类型:

输入类型规则
Array返回ture
Binary dataReturns true
Boolean直接返回
Code返回true
Date返回true
Decimal0返回false,非0返回true
Double0返回false,非0返回true
Integer0返回false,非0返回true
JavaScript返回true
Long0返回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 }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值