如何在对象中获得一些字段?

我有一个收集“学生”。

{ student:"Jone Doe", class:"A", subjects: [ {subject:"Math",teacher:"Linda","score":"82"}, {subject:"English",teacher:"Jone","score":"52"}, {subject:"History",teacher:"Maria","score":"32"}, ] } { student:"Baby Doe", class:"B", subjects: [ {subject:"Math",teacher:"Hilary","score":"52"}, {subject:"English",teacher:"Notham","score":"52"}, {subject:"History",teacher:"Hamet","score":"32"}, ] } 

我想要得到学生的“math”科目的所有分数。

即时通讯使用aggregation得到

 db.collection('studens').aggregate([ {$match: {"subjects.subject" : "Math" } }, {$project: { _id:0, subjects: { $filter: { input: "$subjects", as: "subject", cond: { $lte: [ "$$subject.subject", "Math" ] } } } } } ]); 

结果是:

 {subject:"Math",teacher:"Linda","score":"82"} {subject:"Math",teacher:"Hilary","score":"52"} 

但它显示所有的领域,我想要的结果(只显示主题和分数):

 {subject:"Math","score":"82"} {subject:"Math","score":"52"} 

这个怎么做? 请帮帮我。

我不知道如何排除不支持,我会使用另一个投影包含所需的领域。 (这可能是一个更好的方法)。

让我们试试这个:

 db.collection('studens').aggregate([ {$match: {"subjects.subject" : "Math" } }, {$project: { _id:0, subjects: { $filter: { input: '$subjects', as: 'subjects', cond: {$eq: ['$$subjects.subject', 'Math']} } } } },{$project: {subjects: { subject:1, score:1}}} ]); 

结果:

 "result" : [ { "subjects" : [ { "subject" : "Math", "score" : "82" } ] }, { "subjects" : [ { "subject" : "Math", "score" : "52" } ] } ] 

这是你想要的?