getField (聚合)
定义
$getField
新版本中5.0.
返回文档中指定字段的值。如果您未指定对象,
$getField
返回来自$$CURRENT
.您可以使用
$getField
获取包含点(.
)或以美元符号($
)开头的字段名称的值。提示
使用
$setField
添加或更新包含美元符号($
)或点(.
)的字段名称的值。
语法
$getField
的语法如下
{ $getField: { field: <String>, input: <Object> } }
字段 | 类型 | 描述 |
---|---|---|
field | 字符串 | |
输入 | 对象 |
$getField
有以下用于从 $$CURRENT
获取字段值的缩写语法:
{ $getField: <String> }
对于此语法,参数等同于上述描述的 字段
的值。
行为
示例
查询包含点(.
)的字段
考虑一个具有以下文档的 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 }
以下操作使用 $getField
和 $gt
操作符来查找哪些产品的 price.usd
大于 200
db.inventory.aggregate( [ { $match: { $expr: { $gt: [ { $getField: "price.usd" }, 200 ] } } } ] )
操作返回以下结果
[ { _id: 2, item: 'winter coat', qty: 200, 'price.usd': 499.99 }, { _id: 4, item: 'leather boots', qty: 300, 'price.usd': 249.99 } ]
以美元符号($
)开头的查询字段
考虑一个具有以下文档的 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 }
以下操作使用$getField
、$gt
和$literal
运算符来查找价格大于200
的产品。
db.inventory.aggregate( [ { $match: { $expr: { $gt: [ { $getField: {$literal: "$price" } }, 200 ] } } } ] )
操作返回以下结果
[ { _id: 2, item: 'winter coat', qty: 200, '$price': 499.99 }, { _id: 4, item: 'leather boots', qty: 300, '$price': 249.99 } ]
在子文档中查询字段
创建以下文档的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 } } ] )
以下操作返回数量小于或等于20
的$small
物品的文档。
db.inventory.aggregate( [ { $match: { $expr: { $lte: [ { $getField: { field: { $literal: "$small" }, input: "$quantity" } }, 20 ] } } } ] )
使用这些运算符来查询集合
示例输出
[ { _id: 3, item: 'sun dress', 'price.usd': 199.99, quantity: { '$large': 45, '$medium': 40, '$small': 5 } } ]