91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

MongoDB聚合管道查詢如何進行嵌套

小樊
84
2024-10-30 15:05:30
欄目: 云計算

在MongoDB中,你可以使用聚合管道(aggregation pipeline)進行嵌套查詢。聚合管道是一系列的階段(stages),每個階段都會對數據進行某種操作。要在MongoDB中進行嵌套查詢,你可以使用$unwind$group$project等階段來處理數據。

以下是一個簡單的例子,說明如何在MongoDB中使用聚合管道進行嵌套查詢:

假設我們有一個名為orders的集合,其中包含以下文檔:

[
  {
    "_id": 1,
    "customer_id": 1,
    "items": [
      { "product_id": 1, "quantity": 2 },
      { "product_id": 2, "quantity": 1 }
    ]
  },
  {
    "_id": 2,
    "customer_id": 2,
    "items": [
      { "product_id": 1, "quantity": 1 },
      { "product_id": 3, "quantity": 2 }
    ]
  },
  {
    "_id": 3,
    "customer_id": 1,
    "items": [
      { "product_id": 2, "quantity": 3 },
      { "product_id": 4, "quantity": 1 }
    ]
  }
]

現在,我們想要查詢每個客戶的總消費金額(每個產品的數量乘以其價格)。首先,我們需要知道每個產品的價格。假設我們有一個名為products的集合,其中包含以下文檔:

[
  { "_id": 1, "name": "Product A", "price": 10 },
  { "_id": 2, "name": "Product B", "price": 20 },
  { "_id": 3, "name": "Product C", "price": 30 },
  { "_id": 4, "name": "Product D", "price": 40 }
]

我們可以使用以下聚合管道查詢來計算每個客戶的總消費金額:

db.orders.aggregate([
  {
    $lookup: {
      from: "products",
      localField: "items.product_id",
      foreignField: "_id",
      as: "product_info"
    }
  },
  {
    $unwind: "$items"
  },
  {
    $unwind: "$product_info"
  },
  {
    $addFields: {
      "total_amount": { $multiply: ["$items.quantity", "$product_info.price"] }
    }
  },
  {
    $group: {
      _id: "$customer_id",
      total_spent: { $sum: "$total_amount" },
      items: { $push: "$items" },
      product_info: { $push: "$product_info" }
    }
  },
  {
    $project: {
      _id: 0,
      customer_id: "$_id",
      total_spent: 1,
      items: 1,
      product_info: 1
    }
  }
])

這個查詢的步驟如下:

  1. 使用$lookup階段將orders集合與products集合連接起來,以便獲取每個產品的價格。
  2. 使用$unwind階段將items數組和product_info數組拆分成多個文檔。
  3. 使用$addFields階段計算每個訂單項的總金額(數量乘以價格)。
  4. 使用$group階段按客戶ID對文檔進行分組,并計算每個客戶的總消費金額。
  5. 使用$project階段重新格式化輸出結果。

查詢結果將如下所示:

[
  {
    "customer_id": 1,
    "total_spent": 160,
    "items": [
      { "product_id": 1, "quantity": 2 },
      { "product_id": 2, "quantity": 1 },
      { "product_id": 2, "quantity": 3 },
      { "product_id": 4, "quantity": 1 }
    ],
    "product_info": [
      { "_id": 1, "name": "Product A", "price": 10 },
      { "_id": 2, "name": "Product B", "price": 20 },
      { "_id": 4, "name": "Product D", "price": 40 }
    ]
  },
  {
    "customer_id": 2,
    "total_spent": 90,
    "items": [
      { "product_id": 1, "quantity": 1 },
      { "product_id": 3, "quantity": 2 }
    ],
    "product_info": [
      { "_id": 1, "name": "Product A", "price": 10 },
      { "_id": 3, "name": "Product C", "price": 30 }
    ]
  }
]

0
利津县| 马尔康县| 丰城市| 舟山市| 镇江市| 霸州市| 威宁| 潮安县| 湘潭县| 巢湖市| 乌苏市| 惠东县| 崇礼县| 都江堰市| 故城县| 星子县| 扶绥县| 加查县| 迁西县| 如皋市| 闽侯县| 福州市| 台州市| 尉氏县| 沂水县| 望城县| 抚州市| 吴江市| 乐清市| 于田县| 南江县| 淅川县| 通辽市| 温泉县| 曲靖市| 霍山县| 博湖县| 桃江县| 莎车县| 吉安县| 彭山县|