2017-01-27 2 views
1

にマージはMongoの私は、次のしている配列

{_id: blah, anotherId: "externalId", descriptions: ["foo", "bar"]} 

私は単にこれを書くことができます知っているが、私は数百万レコードを持っているとして、それは非常に遅いです。

db.collectionOfAnotherId.find().forEach(function(r){ 
    var x = {anotherId: r.id, descriptions: []}; 
    db.myCollection.find({anotherId: x.anotherId}).forEach(function(d){ 
     x.descriptions.push(d.description); }); 
     db.newCollection.save(x); 
    }) 

+0

I:たとえば、などの記述の配列を作成する$pushを使用して、左がmyCollectionへの参加を行うに$lookup演算子を使用して、新しいコレクションを次のように$groupパイプラインの結果を書いて考えますあなたがすでに念頭に置いているアイデアを先に進めなければならないのです。どんなDBMSでもそういった施設を提供するのは難しいでしょう。 –

+0

その記述の値が最初から配列だった場合は、すべての固有の要素を持つ集合配列を持っていた可能性があります。 –

+0

元のデータだけが考え出された場合は笑: – Mika

答えて

1

このために集約フレームワークを使用できます。

​​
+0

美しい!これは私の単純な機能よりも速いと思いますか?少なくとも2回データを反復処理する必要もありませんか? – Mika

+0

もっと速くてもいいかもしれませんが、アグリゲーションフレームワークではパフォーマンスが向上することを意味しています。テストするのはかなり簡単ですし、その運賃を見てみましょう。 – chridam

関連する問題