2016-07-14 4 views
0

Вот мой формат данных:

"request" : { 
    "_id" : 1003, 
    "user" : { 
     "username" : "", 
     "password" : "", 
     "_id" : 1111, 
     "gender" : "male", 
     }, 
    "request" : { 
     "merchantid" : "TA456", 
     "txnAmount" : 18000, 
     "fee" :0, 
     "IssuerID" : "18801111", 
     "bankID" : "888888", 
    } 

}, 
"confirmation" : true 

} `

Я не могу получить сумму группы«request.request.txnAmount»по«запросу. Идентификатор пользователя'.

Вот мой запрос:

db.getCollection('megabank_response').aggregate(
[ {  $group : { 
      _id : "request.user._id", 
      totalPrice: { $sum: "request.request.txnAmount"}, 
      count: { $sum: 1 } 
     } 
     } 
    ]) 

И получить результат:

{ 
    "_id" : "request.user._id", 
    "total Price" : 0, 
    "count" : 4.0 
} 

Может кто-нибудь помочь мне, почему мой запрос не может рассчитать сумму?

+0

'txnAmount' является' String' преобразовать его номер, а затем проверить ваши агрегирующий запрос – Yogesh

+0

Я уже пробовал это, и результат остается тем же –

ответ

0

Мне удалось выяснить вопрос, используя ответ от this source. Однако мой запрос немного слишком грязный. Любые способы его оптимизации?

db.getCollection('megabank_response').aggregate([ 
{ 
    "$match": { 
     "request.user._id": 1111 
    } 
}, 
    { 
    "$group":{ 
     _id : "request.user._id", 
     totalPrice: { $sum: '$request.request.txnAmount'}, 
     count: { $sum: 1 } 
    } 
} 

])

Результат:

{ 
"_id" : "request.user._id", 
"totalPrice" : 62000, 
"count" : 3.0 

}

1

Вы, кажется, отсутствует символ $ в функции агрегации группы.

db.megabank_response.aggregate([{ 
    $group: { 
    _id: "request.user._id", 
    ss: { 
     $sum: "request.request.txnAmount" 
    } 
    } 
}]); 

дает: { "_id" : "request.user._id", "ss" : 0 }

Но правильный ответ:

db.megabank_response.aggregate([{ 
    $group: { 
    _id: "$request.user._id", 
    ss: { 
     $sum: "$request.request.txnAmount" 
    } 
    } 
}]); 
+0

Благодарим вас за ответ. Я только что понял, как это работает –

0

Try:

db.getCollection('megabank_response').aggregate([{   
    $group: { 
     _id : "request.user._id", 
     totalPrice: { $sum: "$request.request.txnAmount"}, 
     count: { $sum: 1 } 
    } 
}]) 
Смежные вопросы