2017-04-16 4 views
1

でグループ化された配列にelemsの合計を検索:私は私のコレクションで、次のオブジェクトを持つキー

{ "_id" : ObjectId("58f39ea016101165e01a40ff"), 
"sex" : "Male", 
"first_name" : "Andrew", 
"last_name" : "Fernandez", 
"nationality" : "Somalia", 
"credit" : [ 
    { 
     "type" : "jcb", 
     "number" : "5100178605311200", 
     "currency" : "CZK", 
     "balance" : "4409.71" 
    } 
]} 

質問は次のとおりです。最も簡単なすべてのオブジェクトからすべてのバランスの合計をカウントする方法とグループは何です通貨で?私にとって、問題は、クレジットは配列であり、クレジット配列には多くのオブジェクトが存在する可能性があるということです。

答えて

1

わかりました。私は将来の誰でもこの投稿を見ることができ、それが役に立つかもしれないように私の答えを投稿しています。

まず、文字列をcreditオブジェクトでfloatに変換する必要があります。これを行うために、私たちは私たちのコレクションを反復処理する必要があります。

db.people.find().forEach(function (x) { 
    x.credit.forEach(function (credit) { 
     credit.balance = parseFloat(credit.balance); 
    }) 
    db.people.save(x); 
}); 

我々はバランスがフロートとして保存していますように、これが我々のデータを変換します。最後に、クエリを作成する必要があります。

db.people.aggregate( 
    [ 
    { $unwind : "$credit" }, 
    { $group: { 
     _id: "$credit.currency", 
     restOfMoney: { $sum: '$credit.balance' } 
     } 
    } 
    ] 
) 

ここでは何が起こっていますか?

  1. アンワインドは
  2. グループは、通貨に基づいてグループを作り、そこに私たちはバランスの合計をカウント配列内の各アイテムのための余分な行を作る
関連する問題