Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

$toBool(聚合)

在此页面上

  • 定义
  • 行为
  • 例子
$toBool

将数值转换为布尔值。

$toBool 通过以下语法实现:

{
$toBool: <expression>
}

$toBool 采用任何有效的 表达式

$toBool 是以下 $convert 表达式的简写:

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

提示

另请参阅:

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

输入类型
行为

阵列

返回 true

二进制数据

返回 true

布尔

不操作。返回布尔值。

代码

返回 true

Date

返回 true

Decimal 数据类型

Returns true if not zero
Return false if zero

double

Returns true if not zero
Return false if zero

整型

Returns true if not zero
Return false if zero

JavaScript

返回 true

Long

Returns true if not zero
Return false if zero

Max key

返回 true

最小键值

返回 true

null

返回 null

对象

返回 true

ObjectId

返回 true

正则表达式

返回 true

字符串

返回 true

时间戳

返回 true

要详细了解 MongoDB 中的数据类型,请参阅 BSON 类型

下表列出了一些转换为布尔值的示例:

例子
结果

{$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" }, // Note: All strings convert to true
{ _id: 6, item: "nougat", shipped: "" } // Note: All strings convert to true
] )

在查找未发货订单之前,对 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
] )

该操作将返回以下文档:

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

注意

如果转换操作遇到错误,聚合操作会停止并抛出错误。要覆盖此行为,请改为使用 $convert

后退

$tanh

在此页面上