I MongoDB, $cond
aggregeringspipeline-operatorn utvärderar ett booleskt uttryck och returnerar ett av de två angivna returuttrycken, beroende på om det booleska uttrycket är true
eller false
.
$cond
operatorn accepterar två syntaxer:en långhandssyntax och en stenografisyntax. Exempel på varje är nedan.
Exempel
Anta att vi har en samling som heter pets
med följande dokument:
{ "_id" : 1, "name" : "Fetch", "type" : "Dog", "weight" : 20, "height" : 30 }
Longhand-syntax
Här är ett exempel på hur du använder $cond
till det dokumentet med hjälp av långhandssyntaxen:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: { if: { "$type": "Dog" }, then: "Yes", else: "No" }
}
}
}
]
)
Resultat:
{ "isCanine" : "Yes" }
I det här exemplet jämförde vi type
fältet till ett bokstavligt värde.
I följande exempel jämför vi två fält i dokumentet.
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: {
if: {
$gte: [ "$weight", "$height" ] },
then: "Fat",
else: "Skinny"
}
}
}
}
]
)
Resultat:
{ "bodyType" : "Skinny" }
Shorthand-syntax
$cond
operatorn accepterar också en stenografisyntax som gör din kod mer kortfattad.
Stenografin innebär i princip att if
tas bort , then
och else
sökord.
När du gör detta måste du omsluta uttrycken i en array.
I det här exemplet skriver vi om det första exemplet för att använda stenografisyntaxen:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: [ { "$type": "Dog" }, "Yes", "No" ]
}
}
}
]
)
Resultat:
{ "isCanine" : "Yes" }
Och här är det andra exemplet med stenografi:
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: [
{ $gte: [ "$weight", "$height" ] },
"Fat",
"Skinny"
]
}
}
}
]
)
Resultat:
{ "bodyType" : "Skinny" }