$toBool (aggregation)

On this page本页内容

Definition定义

$toBool

New in version 4.0.在版本4.0中新增

Converts a value to a boolean.将值转换为布尔值。

$toBool has the following syntax:语法如下:

{
   $toBool: <expression>
}

The $toBool takes any valid expression.$toBool接受任何有效表达式

The $toBool is a shorthand for the following $convert expression:$toBool是以下$convert表达式的缩写:

{ $convert: { input: <expression>, to: "bool" } }
Tip提示
See also: 参阅:

Behavior行为

The following table lists the input types that can be converted to a boolean:下表列出了可以转换为布尔值的输入类型:

Input Type输入类型Behavior行为
BooleanNo-op. 无。Returns the boolean value.返回布尔值。
Double
Returns true if not zero.如果不为零,则返回true
Return false if zero.如果为零,则返回false
Decimal
Returns true if not zero.如果不为零,则返回true
Return false if zero.如果为零,则返回false
Integer
Returns true if not zero.如果不为零,则返回true
Return false if zero.如果为零,则返回false
Long
Returns true if not zero.如果不为零,则返回true
Return false if zero.如果为零,则返回false
ObjectId
Returns true.返回true
String
Returns true.返回true
Date
Returns true.返回true

The following table lists some conversion to boolean examples:下表列出了一些转换为布尔值的示例:

Example示例Results结果
{$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

Example示例

Create a collection orders with the following documents:使用以下文档创建集合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" },  // Note: All strings convert to true
   { _id: 6, item: "nougat", shipped: ""  }
       // Note: All strings convert to true
] )

The following aggregation operation on the orders collection converts the shipped to a boolean value before finding the unshipped orders:在查找未发货订单之前,orders集合上的以下聚合操作将shipped转换为布尔值:

// Define stage to add convertedShippedFlag field with the converted shipped value
// Because all strings convert to true, include specific handling for "false" and ""
shippedConversionStage = {
   $addFields: {
      convertedShippedFlag: {
         $switch: {
            branches: [
              { case: { $eq: [ "$shipped", "false" ] }, then: false } ,
              { case: { $eq: [ "$shipped", "" ] }, then: false }
            ],
            default: { $toBool: "$shipped" }
        }
      }
   }
};
// Define stage to filter documents and pass only the unshipped orders
unshippedMatchStage = {
   $match: { "convertedShippedFlag": false }
};
db.orders.aggregate( [
  shippedConversionStage,
  unshippedMatchStage
] )

The operation returns the following document:运算返回以下文档:

{ "_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 }
Note注意

If the conversion operation encounters an error, the aggregation operation stops and throws an error. 如果转换操作遇到错误,聚合操作将停止并抛出错误。To override this behavior, use $convert instead.要覆盖此行为,请改用$convert

←  $tanh (aggregation)$toDate (aggregation) →