Mongodb 具有多个条件的聚合开关大小写语法
我尝试在Mongo中执行一个简单的切换案例,但不断收到语法错误消息Mongodb 具有多个条件的聚合开关大小写语法,mongodb,switch-statement,mongodb-query,aggregation-framework,Mongodb,Switch Statement,Mongodb Query,Aggregation Framework,我尝试在Mongo中执行一个简单的切换案例,但不断收到语法错误消息 db.users.aggregate([ { $project: { "age": 1, "Age Group":{ $switch:{ branches:[ { case: {$lte:[{"age": "18"}]}, then: "Minor" }, {
db.users.aggregate([
{ $project: {
"age": 1,
"Age Group":{
$switch:{
branches:[
{
case: {$lte:[{"age": "18"}]},
then: "Minor"
},
{
case: {$gt:[{"age": "18"}]},
{$lte:[{"age": "30"}]},
then: "Young Adult"
}
],
default: "No Age Group"
}
}
}}
])
有人能帮忙吗?如果您实际拥有MongoDB 3.2,您需要一个用于多种条件的:
db.users.aggregate([
{ "$project": {
"age": 1,
"Age Group": {
"$switch": {
"branches": [
{
"case": { "$lte": ["$age", "18"] },
"then": "Minor"
},
// This one <----
{
"case": {
"$and": [
{ "$gt": ["$age", "18"] },
{ "$lte": ["$age", "30"] }
]
},
"then": "Young Adult"
}
],
"default": "No Age Group"
}
}
}}
])
最重要的是,和逻辑运算符将“数组”作为参数,而不是您试图使用它们时的“对象”。这与“查询”运算符窗体不同
注意:您还需要用$
表示“字段值”,否则它只是一个“字符串”。当然,age
的值也是字符串,因此“9”
实际上并不“小于”“18”
。您可能应该修改数据,将其存储为数值
如果您实际上没有MongoDB 3.2,那么这实际上总是可以通过实现的,但在语法上稍微长一点:
db.users.aggregate([
{ "$project": {
"age": 1,
"Age Group": {
"$cond": {
"if": { "$lte": ["$age", "18" ] },
"then": "Minor",
"else": {
"if": { "$lte": ["$age", "30"] },
"then": "Young Adult",
"else": "No Age Group"
}
}
}
}}
])
所以“嵌套”的形式基本上就是用不同的语法形式所做的,没有“嵌套”。但是,聚合框架已经存在了很久,所以您总是可以这样做的
db.users.aggregate([
{ "$project": {
"age": 1,
"Age Group": {
"$cond": {
"if": { "$lte": ["$age", "18" ] },
"then": "Minor",
"else": {
"if": { "$lte": ["$age", "30"] },
"then": "Young Adult",
"else": "No Age Group"
}
}
}
}}
])