$(投影)

适用对象: 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
        }
      ]
    }
  }

限制

  • 投影文档中只能显示一个位置 $ 运算符。
  • 查询文档中只应显示一个数组字段。 查询文档中的更多数组字段可能会导致未定义的行为。