On this page
$literal (aggregation)
在本页面
Definition
$literal
- 返回不解析的值。用于聚合管道可以解释为表达式的值。
$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 }