2016-04-25 9 views
2

私は "Students"というコレクションを持っています。オブジェクトの一部のフィールドを取得するには?

{ 
    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"}, 
    ] 
} 

そして、私は学生の科目「数学」をすべて取得したいと思います。

:結果(のみ対象示し、スコア)に

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

しかし、それはすべてのフィールドを示し、そして私が欲しい:

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

そして結果を得るためにaggregationを使用して

イム

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

これを行う方法? 私を助けてください。

+0

[OK]を、よく私はちょうどあなたの集計をテスト..私は取得しています: ' "結果":[ { "科目":[ //すべての値 ] }、 { "科目":[ //すべての値が英語と他のサブジェクト ] } ]これはあなたが得ているものですか? – rahpuser

+0

条件を$ eqに変更して、今では数学の対象文書を取得しています。これはあなたが探している出力ですか?値の除外はサポートされていません。したがって、おそらく、サポートのおかげで – rahpuser

答えて

1

除外がサポートされていないため、これをどのように行うべきかわかりません。希望のフィールドを含めるために別の投影法を使用します。 (おそらくこれを行う良い方法があります)。

はこれを試すことができます:

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" 
      } 
     ] 
    } 
] 

これはあなたが探しているものですか?

+0

のフィールドを使用して別の投影法を試すことができました。そしてこれのためのより良い方法は? –

+0

私はこの1秒の権利を考えることはできません。これよりも良いアイデアが得られたら、私は答えを編集します。それがあなたを助けてくれてうれしいです。 – rahpuser

関連する問題