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

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐