2017-02-21 64 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

是的,我打算改变它......你能给我一些好的建议吗? –

相关问题