适用对象:
MongoDB vCore
$
运算符用于数组投影,允许用户从匹配查询条件的数组中提取第一个元素。
语法
使用 $
投影运算符的语法如下:
db.collection.find({}
,{
"projection_field": {
"$": 1
}
}
)
参数
说明 | |
---|---|
projection_field |
需要从中投影特定元素的数组字段的名称。 |
示例
让我们了解 stores
数据集中的示例 json 的用法。
{
"_id": "d3c9df51-41bd-4b4e-a26b-b038d9cf8b45",
"name": "Lakeshore Retail",
"location": {
"lat": -67.7571,
"lon": 97.2505
},
"sales": {
"totalSales": 149849,
"salesByCategory": [
{
"categoryName": "DJ Speakers",
"totalSales": 36972
},
{
"categoryName": "DJ Headphones",
"totalSales": 12877
},
{
"categoryName": "Music Accessories",
"totalSales": 40000
},
{
"categoryName": "DJ Accessories",
"totalSales": 60000
}
]
},
"tag": [
"#ShopLocal",
"#FashionStore",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
示例 1:投影数组的第一个元素,与条件匹配
对于 salesByCategory
大于 35000 的 DJ
设备,示例返回 totalSales
数组中的第一个元素。
db.stores.find(
{ "sales.salesByCategory": {
$elemMatch: {
"categoryName": { $regex: "^DJ" }
}
}
,"sales.salesByCategory.totalSales": {$gt: 35000} }
,{"sales.salesByCategory.$":1}
).limit(2)
此查询返回由 two
执行的 limit
个匹配文档,仅包含该数组中的第一个元素。
{
"_id": "d3c9df51-41bd-4b4e-a26b-b038d9cf8b45",
"sales": {
"salesByCategory": [
{
"categoryName": "DJ Speakers",
"totalSales": 36972
}
]
}
},
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"sales": {
"salesByCategory": [
{
"categoryName": "DJ Headphones",
"totalSales": 35911
}
]
}
}
限制
- 投影文档中只能显示一个位置
$
运算符。 - 查询文档中只应显示一个数组字段。 查询文档中的更多数组字段可能会导致未定义的行为。