mongoDB子集数组筛选之filter

1.示例数据
db.test.insert(
{
  "className" : "test_1",
  "studentNumber" : 5,
  "students" : [{
      "name" : "xiaoming",
      "sex" : true,
      "age" : 19
    }, {
      "name" : "xiaohua",
      "sex" : false,
      "age" : 17
    }, {
      "name" : "daming",
      "sex" : true,
      "age" : 17
    }, {
      "name" : "dahua",
      "sex" : false,
      "age" : 18
    }, {
      "name" : "tom",
      "sex" : true,
      "age" : 18
    }]
}
)
2.查询描述

上面是我们的示例数据,有的时候我们在子查询时,不想把所有的子集全部查询出来,可能只想查出一部分满足条件的。那么我们可以使用$filter来实现。

  • 现在我要只想查出班级中,性别为男的数据。
db.test.aggregate([
    {
      "$project" : {
        "className" : 1,
        "studentNumber" : 1,
        "students" : {
          "$filter" : {
            "input" : "$students",
            "as" : "item",
            "cond" : {
              "$eq" : ["$$item.sex", true]
            }
          }
        }
      }
    }
])
mongoDB子集数组筛选之filter_第1张图片
查询结果
  • 我想把男生女生分组在两个不同子集
db.test.aggregate([
    {
      "$project" : {
        "className" : 1,
        "studentNumber" : 1,
        "boy" : {
          "$filter" : {
            "input" : "$students",
            "as" : "item",
            "cond" : {
              "$eq" : ["$$item.sex", true]
            }
          }
        },
        "gril" : {
          "$filter" : {
            "input" : "$students",
            "as" : "item",
            "cond" : {
              "$eq" : ["$$item.sex", false]
            }
          }
        }
      }
    }
])
mongoDB子集数组筛选之filter_第2张图片
查询结果
3.语法解析

mongoDB子集数组筛选之filter_第3张图片
语法解析

官网关于$filter解析,点击

你可能感兴趣的:(mongoDB子集数组筛选之filter)