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]

}

}

}

}

}

])

b3a783564aa1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

查询结果

我想把男生女生分组在两个不同子集

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]

}

}

}

}

}

])

b3a783564aa1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

查询结果

3.语法解析

b3a783564aa1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

语法解析

官网关于$filter解析,点击

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐