hum*_*kie 17 mongodb mongodb-query aggregation-framework
所以我需要一个在MongoDB中计算的自定义字段,如下所示
if( field1 =="A") ->customfield=10
else if(field1 =="B" )->customfield=20
else (field1 =="C" ) ->customfield=15
Run Code Online (Sandbox Code Playgroud)
我正在使用聚合以及$ project语句.但$ cond运算符不允许elseif(subbranching else)并且只允许两个静态分支if和else.使用嵌套的elseif原因
"exception: field inclusion is not allowed inside of $expressions"
继承人我的查询(这给了我错误)
db.items.aggregate([ { $project :
{
name: 1,
customfield:
{
$cond: { if: { $eq: [ "$field1", "4" ] }, then: 30,
else: {
if:
{ $eq: ["$field1","8"]},
then: 25, else: 10}}
}
}},{ $sort: { customfield: 1 }},{$limit:12}]);
Run Code Online (Sandbox Code Playgroud)
有没有一种方法或解决方法.如果这是一个重复的问题我很抱歉,但我找不到类似的问题.
Nei*_*unn 35
在编写本文时,运营商的$switch
关键字switch
仅是最近版本的MongoDB的新增内容.目的是为了清楚,但在这种情况下,它似乎引起了一些混乱.
作为case
运算符if..then..else
确实是三元运算符,就像在许多编程语言中实现的一样.这意味着作为"内联"条件,而不是为条件创建逻辑"块",任何不符合第一个条件的东西都属于$cond
.
因此,您"嵌套"语句而不是跟随块:
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 }
])
Run Code Online (Sandbox Code Playgroud)
三元意味着三个条件,不多也不少.所以所有if..then..else
逻辑都必须嵌套.
nor*_*ort 12
MongoDB 3.4有一个新东西$switch
需要这个确切的东西!
$switch: {
branches: [
{ case: <expression>, then: <expression> },
{ case: <expression>, then: <expression> },
...
],
default: <expression>
}
Run Code Online (Sandbox Code Playgroud)
https://docs.mongodb.com/manual/reference/operator/aggregation/switch/
归档时间: |
|
查看次数: |
28278 次 |
最近记录: |