1
我收藏的這兩份文件是這樣的:
頭文件
{
"_id" : 2055,
"counervalues" : {
"chcounter" : 3
"bscounter" : 10
}
"attributionvalues" :[
{
"id" : 1
"conversionvalue" : 85.0
"conversioncounter" : 6300.0
},
{
"id" : 2
"conversionvalue" : 25.0
"conversioncounter" : 600
}
}
第二份文件
{
"_id" : 1046,
"counervalues" : {
"chcounter" : 23
"bscounter" : 46
}
"attributionvalues" :[
{
"id" : 1
"conversionvalue" : 15.0
"conversioncounter" : 275.0
},
{
"id" : 2
"conversionvalue" : 65.0
"conversioncounter" : 12000.0
}
}
現在我想要應用匯總框架以獲得一個結果如下的新文檔:
結果
{
"_id" : 3005,
"counervalues" : {
"chcounter" : 26
"bscounter" : 56
}
"attributionvalues" :[
{
"id" : 1
"conversionvalue" : 100.0
"conversioncounter" : 6575.0
},
{
"id" : 2
"conversionvalue" : 90.0
"conversioncounter" : 12600.0
}
}
我開始了我的聚集是這樣的:
db.conversion.counters.aggregate({
$match:
{
"_id" : {"$gte" : 1046 , "$lte" : 2055}
}
$group:
{
cvchc: {$sum: "$counervalues.chcounter"}
cvbsc: {$sum: "$counervalues.bscounter"}
}
});
,但我有麻煩根據其ID匹配attributionvalues和添加。
任何人有想法?
你怎麼會在結果中的'_id'?這不是前兩個文件的總和。 –
我很確定這在shell中是不可能的 - 你需要在你的應用程序中執行它。你也許可以編寫一個自定義的mapReduce函數,但是你也可以在你的應用程序中執行它。 –
@DavidGrinberg _id無關緊要,我會通過我的應用程序添加它。我只使用shell來更快地嘗試一下。在我的應用程序中,我使用支持聚合框架的spring數據。我當然可以在我的應用程序中做到這一點,但通常在MongoDB中您會得到大量的結果,我認爲聚合框架將比在應用程序中迭代它們更快。 –