如何在对象中获得一些字段?
我有一个收集“学生”。
{ 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" } ] } ]
这是你想要的?