$literal (aggregation)

在本页面

Definition

$literal表达式具有以下语法:

{ $literal: <value> }

Behavior

如果<value>expression,则$literal不评估表达式,而是返回未解析的表达式。

Example Result
{ $literal: { $add: [ 2, 3 ] } } { "$add" : [ 2, 3 ] }
{ $literal: { $literal: 1 } } { "$literal" : 1 }

Examples

将$当作 Literals

expression中,美元符号$等于字段路径;即提供访问该字段的权限。例如,$eq表达式$eq: [ "$price", "$1" ]在文档中名为price的字段中的值与名为1的字段中的值之间执行相等性检查。

下面的示例使用$literal表达式将包含美元符号"$1"的字符串视为常量。

集合records具有以下文档:

{ "_id" : 1, "item" : "abc123", price: "$2.50" }
{ "_id" : 2, "item" : "xyz123", price: "1" }
{ "_id" : 3, "item" : "ijk123", price: "$1" }
db.records.aggregate( [
   { $project: { costsOneDollar: { $eq: [ "$price", { $literal: "$1" } ] } } }
] )

此操作将投影名为costsOneDollar的字段,该字段具有布尔值,指示price字段的值是否等于字符串"$1"

{ "_id" : 1, "costsOneDollar" : false }
{ "_id" : 2, "costsOneDollar" : false }
{ "_id" : 3, "costsOneDollar" : true }

投影一个值为 1 的新字段

$project阶段使用表达式<field>: 1在输出中包含<field>。以下示例使用$literal返回设置为1值的新字段。

集合bids具有以下文档:

{ "_id" : 1, "item" : "abc123", condition: "new" }
{ "_id" : 2, "item" : "xyz123", condition: "new" }

以下聚合对表达式item: 1求值,以表示在输出中返回现有字段item,但使用{ $literal: 1 }表达式返回设置为值1的新字段startAt

db.bids.aggregate( [
   { $project: { item: 1, startAt: { $literal: 1 } } }
] )

该操作产生以下文档:

{ "_id" : 1, "item" : "abc123", "startAt" : 1 }
{ "_id" : 2, "item" : "xyz123", "startAt" : 1 }
首页