Rumah >hujung hadapan web >tutorial js >Talian Paip Pengagregatan MongoDB

Talian Paip Pengagregatan MongoDB

PHPz
PHPzasal
2024-07-31 20:32:41903semak imbas

MongoDB Aggregation Pipelines

Hai, makhluk asing! Saya Pavan. Jadi dalam repositori ini, saya akan menerangkan semua peringkat pengagregatan secara mendalam dengan contoh asas. Saya juga akan menyertakan pautan kepada sumber untuk pembelajaran lanjut.

Jadi repositori ini mengandungi fail JSON untuk pelbagai saluran paip pengagregatan MongoDB. Saluran paip ini menunjukkan cara menggunakan peringkat dan operasi pengagregatan yang berbeza untuk memproses dan menganalisis data.

Jadual Kandungan

  • Pengenalan
  • Operasi CRUD
  • Peringkat Pengagregatan
    • $perlawanan
    • $kumpulan
    • $projek
    • $sort
    • $limit
    • $skip
    • $lookup
    • $rehatkan
    • $addFields
    • $replaceRoot
  • Operasi Pengagregatan
    • $sum
    • $avg
    • $min
    • $maks
    • $first
    • $terakhir
  • Contoh Set Data
  • Sumber untuk Pembelajaran Lanjut

pengenalan

Pengagregatan dalam MongoDB ialah cara yang berkuasa untuk memproses dan menganalisis data yang disimpan dalam koleksi. Ia membolehkan anda melakukan operasi seperti menapis, mengumpulkan, mengisih dan mengubah data.

Operasi CRUD

Buat

db.orders.insertOne({
  "order_id": 26,
  "cust_id": 1006,
  "status": "A",
  "amount": 275,
  "items": ["apple", "banana"],
  "date": "2023-01-26"
});

Baca

db.orders.find().pretty();

Kemas kini

db.orders.updateOne(
  { "order_id": 2 },
  {
    $set: { "status": "C", "amount": 500 },
    $currentDate: { "lastModified": true }
  }
);

Padam

db.orders.deleteOne({ "order_id": 1 });

Peringkat Pengagregatan

$perlawanan

Menapis dokumen untuk menghantar hanya dokumen yang sepadan dengan syarat yang ditentukan ke peringkat saluran paip seterusnya.

db.orders.aggregate([
  { $match: { "status": "A" } }
]);

$kumpulan

Kumpulkan dokumen input mengikut ungkapan _id yang ditentukan dan untuk setiap kumpulan yang berbeza, mengeluarkan dokumen. Medan _id mengandungi kumpulan unik mengikut nilai.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      totalSpent: { $sum: "$amount" }
    }
  }
]);

$projek

Mengirim bersama dokumen dengan medan yang diminta ke peringkat seterusnya dalam perancangan.

db.orders.aggregate([
  { $project: { "order_id": 1, "items": 1, "_id": 0 } }
]);

$sort

Isih semua dokumen input dan mengembalikannya ke saluran paip dalam tertib diisih.

db.orders.aggregate([
  { $sort: { "amount": -1 } }
]);

$had

Menghadkan bilangan dokumen yang dihantar ke peringkat seterusnya dalam perancangan.

db.orders.aggregate([
  { $limit: 5 }
]);

$langkau

Melangkau n dokumen pertama dan menyerahkan dokumen yang tinggal ke peringkat seterusnya dalam perancangan.

db.orders.aggregate([
  { $skip: 5 }
]);

$carian

Melakukan gabungan luar kiri ke koleksi lain dalam pangkalan data yang sama untuk menapis dalam dokumen daripada koleksi "bergabung" untuk diproses.

db.orders.aggregate([
  {
    $lookup: {
      from: "orderDetails",
      localField: "order_id",
      foreignField: "order_id",
      as: "details"
    }
  }
]);

$berehat

Nyahbina medan tatasusunan daripada dokumen input untuk mengeluarkan dokumen bagi setiap elemen.

db.orders.aggregate([
  { $unwind: "$items" }
]);

$addFields

Menambah medan baharu pada dokumen.

db.orders.aggregate([
  { $addFields: { totalWithTax: { $multiply: ["$amount", 1.1] } } }
]);

$replaceRoot

Menggantikan dokumen input dengan dokumen yang ditentukan.

db.orders.aggregate([
  { $replaceRoot: { newRoot: "$items" } }
]);

Operasi Pengagregatan

$jumlah

Mengira dan mengembalikan jumlah nilai berangka. $sum mengabaikan nilai bukan angka.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      totalSpent: { $sum: "$amount" }
    }
  }
]);

$avg

Mengira dan mengembalikan nilai purata nilai berangka.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      averageSpent: { $avg: "$amount" }
    }
  }
]);

$min

Mengembalikan nilai minimum daripada nilai angka.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      minSpent: { $min: "$amount" }
    }
  }
]);

$maks

Mengembalikan nilai maksimum daripada nilai angka.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      maxSpent: { $max: "$amount" }
    }
  }
]);

$pertama

Mengembalikan nilai pertama daripada dokumen untuk setiap kumpulan.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      firstOrder: { $first: "$amount" }
    }
  }
]);

$terakhir

Mengembalikan nilai terakhir daripada dokumen untuk setiap kumpulan.

db.orders.aggregate([
  {
    $group: {
      _id: "$cust_id",
      lastOrder: { $last: "$amount" }
    }
  }
]);

Contoh Set Data

Contoh dokumen yang digunakan untuk melaksanakan CRUD dan operasi pengagregatan:

[
  { "order_id": 1, "cust_id": 1001, "status": "A", "amount": 250, "items": ["apple", "banana"], "date": "2023-01-01" },
  { "order_id": 2, "cust_id": 1002, "status": "B", "amount": 450, "items": ["orange", "grape"], "date": "2023-01-02" },
  { "order_id": 3, "cust_id": 1001, "status": "A", "amount": 300, "items": ["apple", "orange"], "date": "2023-01-03" },
  { "order_id": 4, "cust_id": 1003, "status": "A", "amount": 150, "items": ["banana", "grape"], "date": "2023-01-04" },
  { "order_id": 5, "cust_id": 1002, "status": "C", "amount": 500, "items": ["apple", "banana"], "date": "2023-01-05" },
  { "order_id": 6, "cust_id": 1004, "status": "A", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-06" },
  { "order_id": 7, "cust_id": 1005, "status": "B", "amount": 200, "items": ["grape", "banana"], "date": "2023-01-07" },
  { "order_id": 8, "cust_id": 1003, "status": "A", "amount": 100, "items": ["apple", "orange"], "date": "2023-01-08" },
  { "order_id": 9, "cust_id": 1004, "status": "C", "amount": 400, "items": ["banana", "grape"], "date": "2023-01-09" },
  { "order_id": 10, "cust_id": 1001, "status": "A", "amount": 250, "items": ["apple", "grape"], "date": "2023-01-10" },
  { "order_id": 11, "cust_id": 1002, "status": "B", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-11" },
  { "order_id": 12, "cust_id": 1003, "status": "A", "amount": 450, "items": ["apple", "orange"], "date": "2023-01-12" },
  { "order_id": 13, "cust_id": 1005, "status": "A", "amount": 150, "items": ["banana", "grape"], "date": "2023-01-13" },
  { "order_id": 14, "cust_id": 1004, "status": "C

", "amount": 500, "items": ["apple", "banana"], "date": "2023-01-14" },
  { "order_id": 15, "cust_id": 1002, "status": "A", "amount": 300, "items": ["orange", "grape"], "date": "2023-01-15" },
  { "order_id": 16, "cust_id": 1003, "status": "B", "amount": 200, "items": ["apple", "banana"], "date": "2023-01-16" },
  { "order_id": 17, "cust_id": 1001, "status": "A", "amount": 250, "items": ["orange", "grape"], "date": "2023-01-17" },
  { "order_id": 18, "cust_id": 1005, "status": "A", "amount": 350, "items": ["apple", "banana"], "date": "2023-01-18" },
  { "order_id": 19, "cust_id": 1004, "status": "C", "amount": 400, "items": ["orange", "grape"], "date": "2023-01-19" },
  { "order_id": 20, "cust_id": 1001, "status": "B", "amount": 150, "items": ["apple", "orange"], "date": "2023-01-20" },
  { "order_id": 21, "cust_id": 1002, "status": "A", "amount": 500, "items": ["banana", "grape"], "date": "2023-01-21" },
  { "order_id": 22, "cust_id": 1003, "status": "A", "amount": 450, "items": ["apple", "banana"], "date": "2023-01-22" },
  { "order_id": 23, "cust_id": 1004, "status": "B", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-23" },
  { "order_id": 24, "cust_id": 1005, "status": "A", "amount": 200, "items": ["grape", "banana"], "date": "2023-01-24" },
  { "order_id": 25, "cust_id": 1001, "status": "A", "amount": 300, "items": ["apple", "orange"], "date": "2023-01-25" }
]

Sumber untuk Pembelajaran Lanjutan

  • Dokumentasi Pengagregatan MongoDB
  • Kursus Universiti MongoDB
  • Pembina Saluran Paip Pengagregatan MongoDB

Jangan ragu untuk mengklon repositori ini dan bereksperimen dengan saluran paip pengagregatan yang disediakan. Jika anda mempunyai sebarang soalan atau cadangan, sila buka isu atau serahkan permintaan tarik.

$kumpulan

Kumpulkan pesanan mengikut status dan mengira jumlah amaun dan amaun purata untuk setiap status.

db.orders.aggregate([
  {
    $group: {
      _id: "$status",
      totalAmount: { $sum: "$amount" },
      averageAmount: { $avg: "$amount" }
    }
  }
]);

$projek

Memproyeksikan ID pesanan, ID pelanggan dan medan yang dikira untuk jumlah keseluruhan dengan cukai (dengan andaian 10% cukai).

db.orders.aggregate([
  {
    $project: {
      "order_id": 1,
      "cust_id": 1,
      "totalWithTax": { $multiply: ["$amount", 1.1] }
    }
  }
]);

$sort

Isih pesanan dahulu mengikut status dalam tertib menaik dan kemudian mengikut amaun dalam tertib menurun.

db.orders.aggregate([
  { $sort: { "status": 1, "amount": -1 } }
]);

$had

Menghadkan keputusan kepada 3 pesanan teratas dengan jumlah tertinggi.

db.orders.aggregate([
  { $sort: { "amount": -1 } },
  { $limit: 3 }
]);

$langkau

Melangkau 5 pesanan pertama dan mengembalikan selebihnya.

db.orders.aggregate([
  { $skip: 5 }
]);

$carian

Sertai koleksi pesanan dengan koleksi Butiran pesanan untuk menambah butiran pesanan.

db.orders.aggregate([
  {
    $lookup: {
      from: "orderDetails",
      localField: "order_id",
      foreignField: "order_id",
      as: "details"
    }
  }
]);

$unwind

Deconstructs the items array in each order to output a document for each item.

db.orders.aggregate([
  { $unwind: "$items" }
]);

$addFields

Adds a new field discountedAmount which is 90% of the original amount.

db.orders.aggregate([
  { $addFields: { discountedAmount: { $multiply: ["$amount", 0.9] } } }
]);

$replaceRoot

Replaces the root document with the items array.

db.orders.aggregate([
  { $replaceRoot: { newRoot: "$items" } }
]);

$sum

Calculates the total amount for all orders.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      totalAmount: { $sum: "$amount" }
    }
  }
]);

$avg

Calculates the average amount spent per order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      averageAmount: { $avg: "$amount" }
    }
  }
]);

$min

Finds the minimum amount spent on an order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      minAmount: { $min: "$amount" }
    }
  }
]);

$max

Finds the maximum amount spent on an order.

db.orders.aggregate([
  {
    $group: {
      _id: null,
      maxAmount: { $max: "$amount" }
    }
  }
]);

$first

Gets the first order placed (by date).

db.orders.aggregate([
  { $sort: { "date": 1 } },
  {
    $group: {
      _id: null,
      firstOrder: { $first: "$$ROOT" }
    }
  }
]);

$last

Gets the last order placed (by date).

db.orders.aggregate([
  { $sort: { "date": -1 } },
  {
    $group: {
      _id: null,
      lastOrder: { $last: "$$ROOT" }
    }
  }
]);

So, we have covered basic CRUD operations, all major aggregation stages, and operations, and looked into resources for further learning.

Atas ialah kandungan terperinci Talian Paip Pengagregatan MongoDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:HTML komponen Dropdown ModenArtikel seterusnya:HTML komponen Dropdown Moden