2017-06-30 13 views
0

MongoDBから始まっています。私の質問があまりにも基本的であれば申し訳ありません。私は、フィールドtipofundoに等しいですエントリのみが含まれているためにcontainvestimentos配列をフィルタリングする

{ 
    nome: "Diego", contas: [ 
    { 
     banco: "itau", 
     tipo: "corrente", 
     investimentos: [{ 
      tipo: "fundo", 
      transacoes: [{ 
       numero: 1, 
       valor: 1000, 
       data: "24/06/2017" 
      }, 
      { 
       numero: 2, 
       valor: 1500, 
       data: "01/02/2017" 
      }] 
     }, 
     { 
      tipo: "poupanca", 
      transacoes: [{ 
       numero: 1, 
       valor: 600, 
       data: "20/06/2017" 
      }] 
     }] 
    }, 
    { 
     banco: "bradesco", 
     tipo: "poupanca", 
     investimentos: [] 
    }, 
    { 
     banco: "santander", 
     tipo: "juridica", 
     investimentos: [{ 
      tipo: "pic", 
      transacoes: [{ 
       numero: 1, 
       valor: 100, 
       data: "20/06/2017" 
      }, 
      { 
       numero: 2, 
       valor: 100, 
       data: "20/05/2017" 
      }, 
      { 
       numero: 3, 
       valor: 100, 
       data: "20/05/2017" 
      }] 
     }] 
    }] 
} 

そして: は、私は次のような構造を持つモンゴでコレクションを持っています。 私のクエリがあります:

db.teste.aggregate([ 
{ 
    $project: { 
     nome: 1, 
     "contas.investimentos": { 
      $filter: { 
       input: "$contas.investimentos", 
       as: "investimento", 
       cond: { $eq: ["$$investimento.tipo", "fundo"]} 
      } 
     } 
    } 
}]); 

結果があります:

{ 
    "_id" : ObjectId("59563cf574f77220ff2166ea"), 
    "nome" : "Diego", 
    "contas" : [ 
     { 
      "investimentos" : [] 
     }, 
     { 
      "investimentos" : [] 
     }, 
     { 
      "investimentos" : [] 
     } 
    ] 
} 

結果がフィールド上investimentosnull、なぜ私はundestandすることはできません。 私はサブアレイでの処理方法が間違っていると思いますが、ギャップがどこにあるのかわかりません。 誰かが私を助けることができますか?

答えて

1

contasの値をマップし、$filterinvestimentosに到達するには、$mapを使用する必要があります。

db.teste.aggregate([{ 
    $project: { 
     nome: 1, 
     contas: { 
      $map: { 
       input: "$contas", 
       as: "contas", 
       in: { 
        banco: "$$contas.banco", 
        tipo: "$$contas.tipo", 
        investimentos: { 
         $filter: { 
          input: "$$contas.investimentos", 
          as: "investimento", 
          cond: { 
           $eq: ["$$investimento.tipo", "fundo"] 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
}]); 
+0

のようなもののおかげ@Veeram! –

関連する問題