2017-02-21 61 views
0

下面給出了我在mongo集合中具有精確結構的4個文檔,在我的集合中有這樣的276個文檔。我只想從我的收藏中獲得不同的「廣告系列名稱」。在mongo集合中獲取mongo文檔數組中的不同特定元素

值和頭陣列一對一的映射:

{ 
    "_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" 
     ] 
    } 

所需輸出:

Campaign 1,Campaign 2,Campaign 4 

作爲廣告2收穫兩次,所以我希望它出現只有一次如上所述。

請幫忙!!

+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

如果Campaign Name的索引不是固定的,而是動態的,那麼map reduce是唯一的辦法嗎?可能是 –

+0

。出於好奇,更新你的結構是你的選擇? – Veeram

+0

是的,我打算改變它......你能給我一些好的建議嗎? –

相關問題