В MongoDB, $cond
Операторът на конвейера за агрегиране оценява булев израз и връща един от двата посочени израза за връщане, в зависимост от това дали булевият израз е true
или false
.
$cond
операторът приема два синтаксиса:синтаксис на дълга ръка и синтаксис на стенография. Примери за всеки са по-долу.
Пример
Да предположим, че имаме колекция, наречена 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
поле до буквална стойност.
В следващия пример сравняваме две полета в документа.
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" }
А ето и вторият пример, използващ стенография:
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: [
{ $gte: [ "$weight", "$height" ] },
"Fat",
"Skinny"
]
}
}
}
]
)
Резултат:
{ "bodyType" : "Skinny" }