2017-05-05 53 views
0

这里找到值是我收集的模型:MongoDB的数组

classes:[{ 
      class:String, 
      info:{ 
        subjects:[String], 
        students:[{ 
         name:String, 
         surname:String, 
         matriculae:Number, 
         path_1:String, 
         path_2:String 
        }], 
        classTeacher:{ 
         name:String, 
         surname:String 
        }     
       } 
      }], 
    accademicYear:String}]; 

我想以检索值“matriculae”给学生的名字,姓氏和accademicYear。我无法将我的头裹在身上!感谢帮助。

+0

让我们知道您曾经试图 – sidgate

+0

显示你已经尝试过的..直到现在.. –

+0

我试着喜欢的事:db.collections.find({accademicYear:“值”,类:{信息: {学生:{$ elemMatch:{名称:'值}}}}); –

回答

0

如果你的意思是你想要的结果扁平格式,试试这个:

School.aggregate([ 
    { 
     $unwind: '$classes' 
    }, { 
     $project: { 
      accademicYear: 1, 
      students: "$classes.info.students" 
     } 
    }, { 
     $unwind: "$students" 
    }, { 
     $project: { 
      accademicYear: 1, 
      matriculae: "$students.matriculae", 
      name: "$students.name", 
      surname: "$students.surname", 
     } 
    } 
    ]) 

在类的情况下收集和accademicYear是collection.Plus添加匹配标准的类里面。

db.getCollection('classes').aggregate([{ 
    $project: { 
     accademicYear: 1, 
     students: "$info.students" 
    } 
}, { 
    $unwind: "$students" 
}, { 
    $project: { 
     accademicYear: 1, 
     matriculae: "$students.matriculae", 
     name: "$students.name", 
     surname: "$students.surname", 
    } 
}, { 
    $match: { 
     name: name, 
     surname: surname, 
     accademicYear: year 

    } 

}]) 
+0

学校打扰收藏名称? –

+0

是的。班级是学校收集的子阵列。在你的案例类是一个集合? –

+0

类是一个集合,与代码高于该文档的所有学生返回。根据最后的预测进行格式化。我希望只返回符合条件(名称:值,姓氏:值)的整个集合中匹配(accademicYear:value)的文档类中的一名学生 –