View a markdown version of this page

$Maks - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

$Maks

Baru dari versi 8.0.1.

$maxNOperator di Amazon DocumentDB mengembalikan N nilai terbesar. Ketika digunakan sebagai akumulator dalam $group tahap, ia mengembalikan array dari N nilai maksimum di setiap grup. Ketika digunakan sebagai operator ekspresi array, ia mengembalikan N elemen maksimum dari sebuah array.

Parameter

  • input: Ekspresi yang menyelesaikan ke array atau bidang dari mana untuk mengembalikan n nilai maksimum.

  • n: Ekspresi yang diselesaikan ke bilangan bulat positif yang menentukan berapa banyak nilai maksimum yang akan dikembalikan.

Perilaku

Perilaku operator ekspresi array

  • Anda tidak dapat menentukan nilai n kurang dari1.

  • $maxNmenyaring null nilai yang ditemukan dalam input array.

  • Jika yang n ditentukan lebih besar dari atau sama dengan jumlah elemen dalam input array, $maxN mengembalikan semua elemen dalam input array.

  • Jika input diselesaikan ke nilai non-array, kesalahan operasi agregasi.

  • Jika input berisi elemen numerik dan string, elemen string diurutkan sebelum elemen numerik sesuai dengan urutan perbandingan BSON.

Perilaku akumulator

  • Ketika digunakan sebagai akumulator, n harus berupa ekspresi integral positif yang merupakan konstanta atau tergantung pada _id nilai untuk$group.

  • $maxNmenyaring nilai nol dan hilang.

  • Jika grup berisi lebih sedikit dari n elemen, $maxN mengembalikan semua elemen dalam grup.

  • $maxNmembandingkan data input mengikuti urutan perbandingan BSON untuk menentukan jenis keluaran yang sesuai. Ketika data input berisi beberapa tipe data, jenis $maxN keluaran adalah yang tertinggi dalam urutan perbandingan.

Pemesanan keluaran

$maxNmengembalikan nilai tanpa urutan tertentu. Jika menjamin urutan pengurutan tertentu adalah persyaratan, gunakan sebagai $topN gantinya, atau bungkus hasilnya dengan$sortArray.

Contoh (MongoDB Shell)

Contoh berikut menunjukkan cara menggunakan $maxN akumulator untuk mengambil dua skor tertinggi untuk setiap subjek.

Buat dokumen sampel

db.scores.insertMany([ { subject: "math", score: 85 }, { subject: "math", score: 72 }, { subject: "math", score: 93 }, { subject: "math", score: 68 }, { subject: "science", score: 90 }, { subject: "science", score: 78 }, { subject: "science", score: 65 }, { subject: "science", score: 88 } ]);

Contoh kueri

db.scores.aggregate([ { $group: { _id: "$subject", highestTwo: { $maxN: { input: "$score", n: 2 } } } } ]);

Keluaran

[ { "_id": "math", "highestTwo": [85, 93] }, { "_id": "science", "highestTwo": [88, 90] } ]

Contoh penggunaan ekspresi (MongoDB Shell)

$maxNOperator juga dapat digunakan sebagai ekspresi dalam $project tahap untuk mengembalikan N elemen terbesar dari bidang array.

Buat dokumen sampel

db.readings.insertMany([ { _id: 1, sensor: "A", values: [45, 12, 78, 3, 56] }, { _id: 2, sensor: "B", values: [90, 23, 67, 11, 44] } ]);

Contoh kueri

db.readings.aggregate([ { $project: { highestThree: { $maxN: { input: "$values", n: 3 } } }} ]);

Keluaran

[ { "_id": 1, "highestThree": [45, 56, 78] }, { "_id": 2, "highestThree": [44, 90, 67] } ]

Contoh kode

Untuk melihat contoh kode untuk menggunakan $maxN operator, pilih tab untuk bahasa yang ingin Anda gunakan. Contoh berikut menunjukkan penggunaan akumulator (in$group) dan penggunaan ekspresi (in$project):

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = new MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); try { await client.connect(); const db = client.db('test'); // Accumulator usage: N largest values per group const scores = db.collection('scores'); const accumulatorResult = await scores.aggregate([ { $group: { _id: "$subject", highestTwo: { $maxN: { input: "$score", n: 2 } } } } ]).toArray(); console.log('Accumulator result:', accumulatorResult); // Expression usage: N largest elements from an array field const readings = db.collection('readings'); const expressionResult = await readings.aggregate([ { $project: { highestThree: { $maxN: { input: "$values", n: 3 } } } } ]).toArray(); console.log('Expression result:', expressionResult); } finally { await client.close(); } } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') try: db = client['test'] # Accumulator usage: N largest values per group scores = db['scores'] accumulator_result = list(scores.aggregate([ { '$group': { '_id': '$subject', 'highestTwo': { '$maxN': { 'input': '$score', 'n': 2 } } } } ])) print('Accumulator result:', accumulator_result) # Expression usage: N largest elements from an array field readings = db['readings'] expression_result = list(readings.aggregate([ { '$project': { 'highestThree': { '$maxN': { 'input': '$values', 'n': 3 } } } } ])) print('Expression result:', expression_result) finally: client.close() example()