Два документа из моей коллекции выглядеть следующим образом:
Первый документ
{
"_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"}
}
});
, но у меня есть проблемы, чтобы соответствовать attributionvalues в соответствии с их идентификаторами и добавить их.
У кого-нибудь есть идея?
Как вы получите '_id' в результате? Это не сумма двух предыдущих документов. –
Я уверен, что это невозможно в оболочке - вам нужно сделать это в своем приложении. Возможно, вы могли бы написать пользовательскую функцию mapReduce, но опять же, вы могли бы также сделать это в своем приложении. –
@DavidGrinberg _id не имеет значения, я бы добавил его через свое приложение. Я использую оболочку только для ускорения работы. В моем приложении я использую весенние данные, которые поддерживают структуру агрегации. Я мог бы сделать это в своем приложении, конечно, но, как правило, в mongodb вы получаете огромное количество результатов, и я думал, что структура агрегации будет быстрее, чем повторение через них в приложении. –