Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
$ set WindowFields
Baru dari versi 8.0.2.
T $setWindowFields ahap di Amazon DocumentDB melakukan operasi pada rentang dokumen tertentu (jendela) di partisi, dan mengembalikan hasil berdasarkan operator jendela yang dipilih. Tahap mengelompokkan dokumen input ke dalam partisi, secara opsional mengurutkannya, dan untuk setiap dokumen menghitung satu atau lebih bidang keluaran di atas jendela dokumen di sekitarnya.
Sintaksis
{ $setWindowFields: { partitionBy: <expression>, sortBy: { <sortField1>: <sortOrder>, ... }, output: { <outputField1>: { <windowOperator>: <expression>, window: { documents: [ <lowerBound>, <upperBound> ], range: [ <lowerBound>, <upperBound> ], unit: <time unit> } }, ... } } }
Parameter
-
partitionBy: Opsional. Ekspresi tunggal yang digunakan untuk mengelompokkan dokumen ke dalam partisi. Ini bisa berupa jalur bidang (misalnya,"$state") atau ekspresi lain. Jika dihilangkan, semua dokumen input milik satu partisi. -
sortBy: Opsional. Dokumen yang menentukan bidang atau bidang untuk mengurutkan dokumen di setiap partisi berdasarkan, dalam bentuk{ <field>: 1 }untuk urutan menaik atau{ <field>: -1 }untuk urutan menurun. AsortBydiperlukan saat Anda menggunakan batas jendela berbasis dokumen atau berbasis rentang, dan saat Anda menggunakan salah satu operator peringkat. -
output: Diperlukan. Dokumen yang menentukan bidang yang akan ditambahkan ke setiap dokumen. Anda dapat menentukan beberapa bidang keluaran, tetapi setiap bidang keluaran membutuhkan tepat satu operator jendela, argumennya, danwindowdokumen opsional yang mendefinisikan batas jendela:{ <field>: { <windowOperator>: <expression>, window: { ... } } }.
Batas jendela
Dalam setiap output bidang Anda dapat secara opsional menentukan batas jendela dengan window dokumen. Jendela dapat ditentukan oleh posisi dokumen atau dengan rentang nilai.
-
documents: Menentukan jendela sebagai sejumlah dokumen sebelum dan sesudah dokumen saat ini, dalam formulir[ <lowerBound>, <upperBound> ]. Setiap ikatan adalah offset integer (misalnya,-1atau2), atau salah satu kata kunci"unbounded"dan"current"."unbounded"memperluas jendela ke awal partisi ketika digunakan sebagai batas bawah, atau ke akhir partisi ketika digunakan sebagai batas atas."current"berarti dokumen saat ini. Sebuahdocumentsjendela membutuhkan asortBykecuali kedua batasnya ada"unbounded". -
range: Menentukan jendela sebagai rentang nilaisortBybidang relatif terhadap dokumen saat ini, dalam formulir[ <lowerBound>, <upperBound> ]. Setiap ikatan adalah angka yang ditambahkan kesortBynilai dokumen saat ini, atau"unbounded"kata kunci. Sebuahrangejendela membutuhkan tepat satusortBybidang menaik dan tidak menerima"current"kata kunci. -
unit: Opsional. Digunakanrangeuntuk menafsirkan batas jendela numerik sebagai rentang waktu ketikasortBybidang menyimpan nilai tanggal. Amazon DocumentDB mendukung unit berikut:"year",,"quarter","month","week","day","hour","minute""second", dan"millisecond". Ketikaunitditentukan,rangebatas harus bilangan bulat.
Ketika window dokumen dihilangkan, jendela default adalahdocuments: ["unbounded", "unbounded"], yang mencakup seluruh partisi.
catatan
Saat Anda menggunakan range jendela di atas nilai tanggal, kami merekomendasikan durasi tetap unit seperti "day" (atau lebih kecil) daripada"month",, atau "quarter""year", yang panjangnya bergantung pada kalender dapat menghasilkan batas jendela yang ambigu.
Operator jendela yang didukung
Amazon DocumentDB mendukung 26 operator jendela berikut di output bidang pang $setWindowFields gung:
$sum$avg$count$push$addToSet$stdDevPop$stdDevSamp$covariancePop$covarianceSamp$first$last$firstN$lastN$top$bottom$topN$bottomN$min$minN$max$maxN$median$percentile$rank$denseRank$documentNumber
catatan
$randOperator tidak didukung dalam operator jendela di pang $setWindowFields gung.
Jendela kosong
Ketika jendela tidak berisi dokumen (misalnya, range jendela tanpa nilai dalam rentang), hasilnya tergantung pada operator: $count dan $sum mengembalikan0;$push,,,$addToSet,$firstN,$lastN, $minN $maxN$topN, dan $bottomN mengembalikan array kosong; $percentile mengembalikan array null nilai (satu per persentil yang diminta); semua operator lain kembali. null
Contoh (MongoDB Shell)
Contoh berikut mempartisi dokumen berdasarkanregion, mengurutkan setiap partisi berdasarkanday, dan menghitung total berjalan revenue dari awal partisi melalui dokumen saat ini.
Buat dokumen sampel
db.sales.insertMany([ { _id: 1, region: "east", day: 1, revenue: 100 }, { _id: 2, region: "east", day: 2, revenue: 150 }, { _id: 3, region: "east", day: 3, revenue: 120 }, { _id: 4, region: "west", day: 1, revenue: 200 }, { _id: 5, region: "west", day: 2, revenue: 180 } ]);
Contoh kueri
db.sales.aggregate([ { $setWindowFields: { partitionBy: "$region", sortBy: { day: 1 }, output: { runningRevenue: { $sum: "$revenue", window: { documents: ["unbounded", "current"] } } } } } ]);
Keluaran
[
{ "_id": 1, "region": "east", "day": 1, "revenue": 100, "runningRevenue": 100 },
{ "_id": 2, "region": "east", "day": 2, "revenue": 150, "runningRevenue": 250 },
{ "_id": 3, "region": "east", "day": 3, "revenue": 120, "runningRevenue": 370 },
{ "_id": 4, "region": "west", "day": 1, "revenue": 200, "runningRevenue": 200 },
{ "_id": 5, "region": "west", "day": 2, "revenue": 180, "runningRevenue": 380 }
]
Setiap dokumen ditambah denganrunningRevenue, jumlah kumulatif dari revenue dalam partisinya hingga dan termasuk dokumen saat ini.
Contoh kode
Untuk melihat contoh kode untuk menggunakan pang $setWindowFields gung, pilih tab untuk bahasa yang ingin Anda gunakan: