Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索MongoDB中的文档数组_Mongodb_Mongo Java - Fatal编程技术网

检索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

我有一个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:[
    {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'}}}
])
反正是这样的