Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 具有多个条件的聚合开关大小写语法_Mongodb_Switch Statement_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb 具有多个条件的聚合开关大小写语法

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" }, {

我尝试在Mongo中执行一个简单的切换案例,但不断收到语法错误消息

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"
        }
      }
    }
  }}
])