On this page本页内容
$getField
New in version 5.0.在版本5.0中新增。
Returns the value of a specified field from a document. 返回文档中指定字段的值。If you don't specify an object, 如果未指定对象,$getField
returns the value of the field from $$CURRENT
.$getField
将从$$CURRENT
返回字段的值。
You can use 可以使用$getField
to retrieve the value of fields with names that contain periods (.
) or start with dollar signs ($
).$getField
检索名称中包含句点(.
)或以美元符号($
)开头的字段的值。
$getField
has the following syntax:语法如下:
{ $getField: { field: <String>, input: <Object> } }
field | String |
|
input | Object | Default:
|
$getField
has the following shorthand syntax for retrieving field values from 具有以下用于从$$CURRENT
:$$CURRENT
检索字段值的简写语法:
{ $getField: <String> }
For this syntax, the argument is equivalent to the value of 对于此语法,参数等效于上述field
described above.field
的值。
field
resolves to anything other than a string constant, $getField
returns an error.field
解析为字符串常量以外的任何值,$getField
将返回错误。field
that you specify is not present in the input
object, or in $$CURRENT
if you don't specify an input
object, $getField
returns missing
.input
对象中不存在指定的field
,或者如果未指定input
对象,且在$$CURRENT
中不存在指定的field
,则$getField
返回missing
。input
evaluates to missing
, undefined
, or null
, $getField
returns null
.input
的计算结果为missing
、undefined
或null
,则$getField
将返回null
。input
evaluates to anything other than an object, missing
, undefined
, or null
, $getField
returns an error.input
的计算结果不是对象、missing
、undefined
或为null
,$getField
将返回错误。$getField
$getField
evaluates a field
value of a.b.c
as a top-level field a.b.c
instead of a nested field { a: { b: { c: } } }
.$getField
将a.b.c
字段值计算为顶级字段a.b.c
,而不是嵌套字段{ a: { b: { c: } } }
。.
).
)的查询字段Consider an 考虑使用以下文档进行inventory
collection with the following documents:inventory
集合:
{ "_id" : 1, "item" : "sweatshirt", "price.usd": 45.99, qty: 300 } { "_id" : 2, "item" : "winter coat", "price.usd": 499.99, qty: 200 } { "_id" : 3, "item" : "sun dress", "price.usd": 199.99, qty: 250 } { "_id" : 4, "item" : "leather boots", "price.usd": 249.99, qty: 300 } { "_id" : 5, "item" : "bow tie", "price.usd": 9.99, qty: 180 }
The following operation uses the 以下操作使用$getField
and $gt
operators to find which products have a price.usd
greater than 200
:$getField
和$gt
运算符查找price.usd
高于200
的产品:
db.inventory.aggregate( [ { $match: { $expr: { $gt: [ { $getField: "price.usd" }, 200 ] } } } ] )
The operation returns the following results:该操作返回以下结果:
[ { _id: 2, item: 'winter coat', qty: 200, 'price.usd': 499.99 }, { _id: 4, item: 'leather boots', qty: 300, 'price.usd': 249.99 } ]
$
)$
)开头的查询字段Consider an 考虑使用以下文档进行inventory
collection with the following documents:inventory
集合:
{ "_id" : 1, "item" : "sweatshirt", "$price": 45.99, qty: 300 } { "_id" : 2, "item" : "winter coat", "$price": 499.99, qty: 200 } { "_id" : 3, "item" : "sun dress", "$price": 199.99, qty: 250 } { "_id" : 4, "item" : "leather boots", "$price": 249.99, qty: 300 } { "_id" : 5, "item" : "bow tie", "$price": 9.99, qty: 180 }
The following operation uses the 以下操作使用$getField
, $gt
, and $literal
operators to find which products have a $price
greater than 200
:$getField
、$gt
和$literal
运算符查找$price
大于200
的产品:
db.inventory.aggregate( [ { $match: { $expr: { $gt: [ { $getField: {$literal: "$price" } }, 200 ] } } } ] )
The operation returns the following results:该操作返回以下结果:
[ { _id: 2, item: 'winter coat', qty: 200, '$price': 499.99 }, { _id: 4, item: 'leather boots', qty: 300, '$price': 249.99 } ]
Create an 使用以下文档创建inventory
collection with the following documents:inventory
集合:
db.inventory.insertMany( [ { "_id" : 1, "item" : "sweatshirt", "price.usd": 45.99, "quantity": { "$large": 50, "$medium": 50, "$small": 25 } }, { "_id" : 2, "item" : "winter coat", "price.usd": 499.99, "quantity": { "$large": 35, "$medium": 35, "$small": 35 } }, { "_id" : 3, "item" : "sun dress", "price.usd": 199.99, "quantity": { "$large": 45, "$medium": 40, "$small": 5 } }, { "_id" : 4, "item" : "leather boots", "price.usd": 249.99, "quantity": { "$large": 20, "$medium": 30, "$small": 40 } }, { "_id" : 5, "item" : "bow tie", "price.usd": 9.99, "quantity": { "$large": 0, "$medium": 10, "$small": 75 } } ] )
The following operation returns documents where the number of 以下操作返回$small
items is less than or equal to 20
.$small
项目数小于或等于20
的文档。
db.inventory.aggregate( [ { $match: { $expr: { $lte: [ { $getField: { field: { $literal: "$small" }, input: "$quantity" } }, 20 ] } } } ] )
Use these operators to query the collection:使用以下运算符查询集合:
$lte
operator finds values less than or equal to 20.$lte
运算符查找小于或等于20的值。$getField
field
and input
parameters because the $small
field is part of a sub-document.field
和input
参数,因为$small
字段是子文档的一部分。$getField
$literal
to evaluate "$small
", because the field name has a dollar sign ($
) in it.$literal
计算“$small
”,因为字段名中有一个美元符号($
)。Example output:示例输出:
[ { _id: 3, item: 'sun dress', 'price.usd': 199.99, quantity: { '$large': 45, '$medium': 40, '$small': 5 } } ]