最新のリリース(MongoDB 3.4以降)では、 $switchを使用します。
、これは基本的に switch
に相当します またはcase
他の言語実装のキーワード:
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 }
])
これにより、ネストが回避されます if..then..else
$condを使用して実行できる条件コード>
以下に示します。ただし、以下は、明示的な if..then..else
の新しい演算子の前であっても、これが常に実行できることを例として示しています。 元の配列表記は常にその構文を維持していたため、キーワード。
配列にも注意してください ここでの条件の例は、通常、ネストされたを作成するよりも、プログラムで作成する方がはるかに簡単です。 $condで必要とされたステートメントのデータ構造コード>
。
if..then..else
$ cond
へのキーワード
演算子は、執筆時点でのMongoDBの最近のバージョンの時点での最近の追加にすぎません(MongoDB2.6はキーワードの導入でした 。実際のオペレーターは、MongoDB 2.2の集約フレームワークのリリースで利用可能になりました)。明確にすることを目的としていましたが、この場合、混乱を引き起こしているようです。
if..then.else
として 演算子 $ cond
確かに else
に属することを意味します。 。
したがって、ブロックに従うのではなく、ステートメントを「ネスト」します。
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 }
]);
または、元の配列でも プログラムでステートメントを作成する場合に好むかもしれない表記法:
db.items.aggregate([
{ "$project": {
"name": 1,
"customfield": {
"$cond": [
{ "$eq": [ "$field1", "4" ] },
30,
{ "$cond": [
{ "$eq": ["$field1","8"] },
25,
10
]}
]
}
}},
{ "$sort": { customfield: 1 }},
{ "$limit":12 }
]);
三進法とは、3つの条件を意味します。それ以上でもそれ以下でもありません。したがって、すべての if..then..else
ロジックはネストする必要があります。