Talian Paip Pengagregatan MongoDB

PHPz
Lepaskan: 2024-07-31 20:32:41
asal
873 orang telah melayarinya

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"
});
Salin selepas log masuk

Baca

db.orders.find().pretty();
Salin selepas log masuk

Kemas kini

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

Padam

db.orders.deleteOne({ "order_id": 1 });
Salin selepas log masuk

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" } }
]);
Salin selepas log masuk

$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" }
    }
  }
]);
Salin selepas log masuk
Salin selepas log masuk

$projek

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

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

$sort

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

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

$had

Menghadkan bilangan dokumen yang dihantar ke peringkat seterusnya dalam perancangan.

db.orders.aggregate([
  { $limit: 5 }
]);
Salin selepas log masuk

$langkau

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

db.orders.aggregate([
  { $skip: 5 }
]);
Salin selepas log masuk
Salin selepas log masuk

$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"
    }
  }
]);
Salin selepas log masuk
Salin selepas log masuk

$berehat

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

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

$addFields

Menambah medan baharu pada dokumen.

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

$replaceRoot

Menggantikan dokumen input dengan dokumen yang ditentukan.

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

Operasi Pengagregatan

$jumlah

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

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

$avg

Mengira dan mengembalikan nilai purata nilai berangka.

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

$min

Mengembalikan nilai minimum daripada nilai angka.

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

$maks

Mengembalikan nilai maksimum daripada nilai angka.

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

$pertama

Mengembalikan nilai pertama daripada dokumen untuk setiap kumpulan.

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

$terakhir

Mengembalikan nilai terakhir daripada dokumen untuk setiap kumpulan.

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

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" }
]
Salin selepas log masuk

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" }
    }
  }
]);
Salin selepas log masuk

$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] }
    }
  }
]);
Salin selepas log masuk

$sort

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

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

$had

Menghadkan keputusan kepada 3 pesanan teratas dengan jumlah tertinggi.

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

$langkau

Melangkau 5 pesanan pertama dan mengembalikan selebihnya.

db.orders.aggregate([
  { $skip: 5 }
]);
Salin selepas log masuk
Salin selepas log masuk

$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"
    }
  }
]);
Salin selepas log masuk
Salin selepas log masuk

$unwind

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

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

$addFields

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

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

$replaceRoot

Replaces the root document with the items array.

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

$sum

Calculates the total amount for all orders.

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

$avg

Calculates the average amount spent per order.

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

$min

Finds the minimum amount spent on an order.

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

$max

Finds the maximum amount spent on an order.

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

$first

Gets the first order placed (by date).

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

$last

Gets the last order placed (by date).

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

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!