Dengan rilis modern ( sejak MongoDB 3.4 ), Anda akan menggunakan $switch
, yang pada dasarnya adalah mitra dari switch
atau case
kata kunci dalam implementasi bahasa lain:
db.items.aggregate([
{ "$project": {
"name": 1,
"customfield": {
"$switch": {
"branches": [
{ "case": { "$eq": [ "$field1", "4" ] }, "then": 30 },
{ "case": { "$eq": [ "$field1", "8" ] }, "then": 25 }
],
"default": 10
}
}
}},
{ "$sort": { customfield: 1 }},
{ "$limit":12 }
])
Ini menghindari bersarang if..then..else
kondisi seperti yang dapat dilakukan menggunakan $cond
dan ditunjukkan di bawah ini. Tetapi di bawah ini masih menunjukkan sebagai contoh bahwa ini selalu dapat dilakukan, bahkan sebelum operator baru bahkan dari if..then..else
eksplisit kata kunci karena notasi array asli selalu mempertahankan sintaks tersebut.
Perhatikan juga bahwa array kondisi di sini biasanya juga jauh lebih mudah untuk dibuat secara terprogram daripada membuat bersarang struktur data untuk pernyataan yang diperlukan dengan $cond
.
if..then..else
kata kunci ke $cond
operator hanyalah tambahan terbaru pada versi terbaru MongoDB pada saat penulisan ( MongoDB 2.6 adalah pengenalan kata kunci . Operator sebenarnya tersedia dengan rilis kerangka kerja agregasi di MongoDB 2.2 ). Tujuannya adalah untuk kejelasan tetapi dalam kasus ini tampaknya telah menyebabkan beberapa kebingungan.
Sebagai if..then.else
operator $cond
memang ternary
operator, seperti yang akan diimplementasikan dalam banyak bahasa pemrograman. Ini berarti sebagai kondisional "inline", daripada membuat "blok" logika ke kondisi, apa pun yang tidak memenuhi kondisi pertama termasuk dalam else
.
Oleh karena itu Anda "menyarangkan" pernyataan daripada mengikuti blok:
db.items.aggregate([
{ "$project": {
"name": 1,
"customfield": {
"$cond": {
"if": { "$eq": [ "$field1", "4" ] },
"then": 30,
"else": {
"$cond": {
"if": { "$eq": ["$field1","8"]},
"then": 25,
"else": 10
}
}
}
}
}},
{ "$sort": { customfield: 1 }},
{ "$limit":12 }
]);
Atau bahkan dengan array asli notasi, yang mungkin lebih disukai beberapa orang jika membuat pernyataan secara terprogram:
db.items.aggregate([
{ "$project": {
"name": 1,
"customfield": {
"$cond": [
{ "$eq": [ "$field1", "4" ] },
30,
{ "$cond": [
{ "$eq": ["$field1","8"] },
25,
10
]}
]
}
}},
{ "$sort": { customfield: 1 }},
{ "$limit":12 }
]);
Ternary berarti tiga syarat, tidak lebih tidak kurang. Jadi semua if..then..else
logika harus bersarang.