2017-09-07 5 views
2

異なるレベルのソーシャルデータを対象とするクエリを実行しています。これはかなり大きな集約パイプラインで動作し、$ファセット内で実行されます。 $ facetセクションの結果には、次に2つの配列を組み合わせています。例えば。Mongodbグループ集計ファセットからの類似データの2つの配列の合計

{ 
"first": [ 
    { 
     "_id": { 
      "name": "one", 
      "_id": "1" 
     }, 
     "date": [ 
      "2017-09-07T00:00:00.000Z" 
     ], 
     "data": [ 
      1000 
     ] 
    }, 
    { 
     "_id": { 
      "name": "two", 
      "_id": "2" 
     }, 
     "date": [ 
      "2017-09-07T00:00:00.000Z" 
     ], 
     "data": [ 
      2000 
     ] 
    } 
], 
"second": [ 
    { 
     "_id": { 
      "name": "1", 
      "_id": "one" 
     }, 
     "date": [ 
      "2017-09-07T00:00:00.000Z" 
     ], 
     "data": [ 
      1000 
     ] 
    }, 
    { 
     "_id": { 
      "name": "two", 
      "_id": "2" 
     }, 
     "date": [ 
      "2017-09-07T00:00:00.000Z" 
     ], 
     "data": [ 
      2000 
     ] 
    } 
] 
} 

私はこれらの結果をグループ化したいと

[ { 
    "_id": { 
     "name": "1", 
     "_id": "one" 
    }, 
    "date": [ 
     "2017-09-07T00:00:00.000Z" 
    ], 
    "data": [ 
     2000 
    ] 
},{ 
    "_id": { 
     "name": "2", 
     "_id": "two" 
    }, 
    "date": [ 
     "2017-09-07T00:00:00.000Z" 
    ], 
    "data": [ 
     4000 
    ] 
}] 

で終わるために合計を追加することになり、私は個々の応答がこのレベルにそれらを取得するグループのクエリを持っていますが、何かが欠けています2つの配列をマージすることができます。私は最初と2番目の配列を巻き戻すことを実験しましたが、両方の配列のデータを結合するソリューションを見つけることができませんでした。

大変助かりましたか?

+0

あなたはこれまでに何を試しましたか? – turmuka

+0

私はかなりの標準的な解決策として、他のものを巻き戻すことを考えて1つの配列を巻き戻そうとしましたが、ペアにしようとしているデータは両方の配列にあります。私は両方の配列をアンワインドしており、それは重複の束を作りますが、おそらく唯一の選択肢です。 "最初の"配列と "2番目の"配列自体でグループを実行することはできません。 –

+0

それらが分割されたら、idsなどのパスを隠すので、ラッピングオブジェクトを削除する必要があります。 例:最初の:{_id、日付、データ}、2番目:{_id、日付、データ} 第1と第2のフラグは、いわば「途中」です。 –

答えて

0

使用$concatArrays$first$sumアキュムレータの最初の要素を選択する$arrayElemAt$group続い$facets出力からの配列をマージします。

[ 
    { 
    "$project": { 
     "combine": { 
     "$concatArrays": [ 
      "$first", 
      "$second" 
     ] 
     } 
    } 
    }, 
    { 
    "$unwind": "$combine" 
    }, 
    { 
    "$group": { 
     "_id": "$combine._id", 
     "date": { 
     "$first": { 
      "$arrayElemAt": [ 
      "$combine.date", 
      0 
      ] 
     } 
     }, 
     "data": { 
     "$sum": { 
      "$arrayElemAt": [ 
      "$combine.data", 
      0 
      ] 
     } 
     } 
    } 
    } 
] 
関連する問題