MongoDBでは、$cond
集計パイプライン演算子はブール式を評価し、ブール式がtrue
であるかどうかに応じて、指定された2つの戻り式のいずれかを返します。 またはfalse
。
$cond
演算子は、ロングハンド構文とショートハンド構文の2つの構文を受け入れます。それぞれの例を以下に示します。
例
pets
というコレクションがあるとします。 次のドキュメントで:
{ "_id" : 1, "name" : "Fetch", "type" : "Dog", "weight" : 20, "height" : 30 }
ロングハンド構文
$cond
を適用する例を次に示します。 長い構文を使用してそのドキュメントに:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: { if: { "$type": "Dog" }, then: "Yes", else: "No" }
}
}
}
]
)
結果:
{ "isCanine" : "Yes" }
この例では、type
を比較しました フィールドをリテラル値に変換します。
次の例では、ドキュメント内の2つのフィールドを比較します。
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: {
if: {
$gte: [ "$weight", "$height" ] },
then: "Fat",
else: "Skinny"
}
}
}
}
]
)
結果:
{ "bodyType" : "Skinny" }
速記構文
$cond
演算子は、コードをより簡潔にする簡略構文も受け入れます。
省略形は基本的にif
を削除することを含みます 、then
、およびelse
キーワード。
これを行うときは、式を配列で囲む必要があります。
この例では、最初の例を書き直して、省略構文を使用します。
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: [ { "$type": "Dog" }, "Yes", "No" ]
}
}
}
]
)
結果:
{ "isCanine" : "Yes" }
そして、これが速記を使用した2番目の例です:
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: [
{ $gte: [ "$weight", "$height" ] },
"Fat",
"Skinny"
]
}
}
}
]
)
結果:
{ "bodyType" : "Skinny" }