检索MongoDB中的文档数组
我有一个MongoDB文档,如下所示检索MongoDB中的文档数组,mongodb,mongo-java,Mongodb,Mongo Java,我有一个MongoDB文档,如下所示 { "_id":1, "name":"XYZ" ExamScores:[ {ExamName:"Maths", UnitTest:1, Score:100}, {ExamName:"Maths", UnitTest:2, Score:80}, {ExamName:"Science", UnitTest:1, Score:90} ] } { "_id":1, "name":"XYZ" ExamScores:[ {ExamN
{
"_id":1,
"name":"XYZ"
ExamScores:[
{ExamName:"Maths", UnitTest:1, Score:100},
{ExamName:"Maths", UnitTest:2, Score:80},
{ExamName:"Science", UnitTest:1, Score:90}
]
}
{
"_id":1,
"name":"XYZ"
ExamScores:[
{ExamName:"Maths", UnitTest:1, Score:100},
{ExamName:"Maths", UnitTest:2, Score:80},
]
}
我需要检索此文档,以便它只能显示数学数组。如下
{
"_id":1,
"name":"XYZ"
ExamScores:[
{ExamName:"Maths", UnitTest:1, Score:100},
{ExamName:"Maths", UnitTest:2, Score:80},
{ExamName:"Science", UnitTest:1, Score:90}
]
}
{
"_id":1,
"name":"XYZ"
ExamScores:[
{ExamName:"Maths", UnitTest:1, Score:100},
{ExamName:"Maths", UnitTest:2, Score:80},
]
}
我该怎么做呢?以前有人问过这个问题,唯一的答案是不可能,但有一个方法可以实现它。正如@karin所说,没有一种正常的查询方法可以做到这一点 在2.2版中,您可以使用
$elemMatch
从ExamCores
中投影第一个匹配结果,但无法获得多个匹配结果
也就是说,聚合框架可以做到这一点:
db.col.aggregate([
{$unwind: '$ExamScores'},
{$match: {'ExamScores.ExamName':"Maths"}},
{$group: {_id: '$_id', name: '$name', ExamScores: {$push: '$ExamScores'}}}
])
反正是这样的