2017-02-21 18 views
0

以下は、mongoコレクション内の正確な構造を持つ4つのドキュメントです。私のコレクションには276ドキュメントがあります。私は単に私のコレクションから別個の "キャンペーン名"を取得したいと思っています。mongoコレクション内のmongoドキュメント配列から別個の特定の要素を取得します。

値とヘッダーアレイは1対1でマッピングされます:

{ 
    "_id" : "ObjectId("58a4adb4ef2bf41444c79e5b1"), 
    "Status" : false, 
    "Headers" : [ 
     "Campaign Name", 
     "Ad Set Name", 
     "Ad Name", 
     "URL Tags", 
    ], 
    "Values" : [ 
     "Campaign 1", 
     "Adset 1", 
     "Ad 1", 
     "url tag1" 
    ] 
} 

, 
{ 
     "_id" : "ObjectId("58a4adb4ef2bf41444c79e5b2"), 
     "Status" : false, 
     "Headers" : [ 
      "Campaign Name", 
      "Ad Set Name", 
      "Ad Name", 
      "URL Tags", 
     ], 
     "Values" : [ 
      "Campaign 2", 
      "Adset 2", 
      "Ad 2", 
      "url tag 2" 
     ] 
    }, 
{ 
     "_id" : "ObjectId("58a4adb4ef2bf41444c79e5b3"), 
     "Status" : false, 
     "Headers" : [ 
      "Campaign Name", 
      "Ad Set Name", 
      "Ad Name", 
      "URL Tags", 
     ], 
     "Values" : [ 
      "Campaign 2", 
      "Adset 2", 
      "Ad 2", 
      "url tag 2" 
     ] 
    }, 
{ 
     "_id" : "ObjectId("58a4adb4ef2bf41444c79e5b4"), 
     "Status" : false, 
     "Headers" : [ 
      "Campaign Name", 
      "Ad Set Name", 
      "Ad Name", 
      "URL Tags", 
     ], 
     "Values" : [ 
      "Campaign 4", 
      "Adset 4", 
      "Ad 4", 
      "url tag 4" 
     ] 
    } 

必要な出力:キャンペーン2として

Campaign 1,Campaign 2,Campaign 4 

は二回収獲されているので、前述したように私はそれが一度だけを表示します。

助けてください!

+0

予想される出力は、ここでは何ですか? – styvane

+0

期待される出力は、コレクション内の各ドキュメントのValues配列の最初の要素になりますが、区別する必要があります。重複したくない。 これはどのような形式でも構いません。特定の形式は必要ありません。必要なデータが必要です。 –

+0

ご質問の編集リンクを使用して、その情報を – styvane

答えて

2

mapReduceでかなり簡単に行うことができます:

db.collection.mapReduce(
    function(){ 
     for(var i = 0; i < this.Headers.length; i++) { 
      if (this.Headers[i] === "Campaign Name" && i in this.Values) { 
       emit(this.Values[i], 1); 
      } 
     } 
    }, 
    function(header, values) { 
      return 1 
    }, 
    {out: {inline: 1}} 
) 
+0

おかげでアレックス、それは私には論理的に見えますが、その私に エラーを与える:マップ削減に失敗しました:{ \t "OK":0、 \t "ERRMSG": "削減 - >まだサポートされていない複数の"、 \t「コード":10075、 \t" codeName ":" Location10075 " } 申し訳ありませんmongoを新しくしました。 –

+2

ああ、十分です。テストするのは簡単すぎるようでした=)。私は答えを更新しました。基本的には、縮小配列内の一意の_idに関心があります。 –

+1

ありがとう、アレックス。それは素晴らしいです。 –

1

この答えは、あなたがすべてのドキュメントで探している値のため、固定率に依存します。

したがって、常に正しい位置にデータを挿入する場合は、HeadersValuesの両方にデータを挿入する必要があります。

Campaign Nameのインデックスは0アレイValues

あなたは、クエリの下で逃げることができている

db.collection.distinct("Values.0"). 
+0

キャンペーン名のインデックスが固定ではなく動的なので、マップの縮小だけがそれを行う方法ですか? –

+0

かもしれません。好奇心の外にあなたの構造をあなたのためのオプションに更新していますか? – Veeram

+0

はい、私はそれを変更する予定です...あなたは私にいくつかの良い提案を与えることができますか? –

関連する問題