比如班级(class)下有(student),查找所有班级的学生名字为张三的写法
方法一:
db.studentclass.aggregate([ { $project: { studentList: { $filter: { input: "$studentList", as: "item", cond: { $eq: [ "$$item.XingMing", "张三" ] } } } } }])
方法二:
db.studentclass.find( { "studentList": { "$elemMatch": { "XingMing":"张三" } } })
两种写法区别: 方法一是只显示名字为张三的学生和班级 方法二则是显示所有名字中带有张三的班级
MongoDB 的aggregate方法有一个pipeline的概念,可以将doc数据经过层层处理,向后传送。
如上例,通过第一个project将所要的field按filter条件的values都筛出来,作为向下的输入;