下面给出了我在mongo集合中具有确切结构的4个文档,我的集合中有276个文档。我只想获得不同的"广告系列名称"来自我的收藏。
值和标头数组是一对一映射的:
{
"_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 :(得分:3)
此答案取决于您在所有文档中查找的值的固定索引。
因此,假设您始终负责在Headers
和Values
中的正确位置插入数据。
对于Campaign Name
,Values
数组
您可以使用以下查询
db.collection.distinct("Values.0").
答案 1 :(得分: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}}
)