2016-12-13 5 views
5

У меня есть некоторые данные в order документе как:mongodb как запросить строку суммы?

{ "_id": "...", "orderTotal": { "amount" : "10.99", "unit": "USD"}, "orderTime": "...", ... } 
{ "_id": "...", "orderTotal": { "amount" : "9.99", "unit": "USD"}, "orderTime": "...", ... } 
{ "_id": "...", "orderTotal": { "amount" : "8.99", "unit": "USD"}, "orderTime": "...", ... } 

Я хочу запросить OrderTotal всех заказов группы в день:

db.getCollection('order').aggregate([ 
    { 
    '$group' : { 
     '_id': { day: { $dayOfMonth: "$orderTime"}, month: {$month: "$orderTime"}, year: { $year: "$orderTime" }}, 
     'totalAmount': { $sum: '$itemTotal.amount' }, 
     'count': { $sum: 1 } 
    } 
    } 
]) 

но получил:

{ 
    "_id" : { 
     "day" : 12, 
     "month" : 12, 
     "year" : 2016 
    }, 
    "totalAmount" : 0, 
    "count" : 4607.0 
} 

amount это строка. Используйте parseFloat, но получите NaN.

db.getCollection('order').aggregate([ 
    { 
    '$group' : { 
     '_id': { day: { $dayOfMonth: "$orderTime"}, month: {$month: "$orderTime"}, year: { $year: "$orderTime" }}, 
     'totalAmount': { $sum: parseFloat('$itemTotal.amount') }, 
     'count': { $sum: 1 } 
    } 
    } 
]) 

получил

{ 
    "_id" : { 
     "day" : 12, 
     "month" : 12, 
     "year" : 2016 
    }, 
    "totalAmount" : NaN, 
    "count" : 4607.0 
} 

Я не могу обновить order документ изменить itemTotal.amount плавать, как и другие вопросы, сказал:

db.order.find().forEach(function(data) { 
    db.order.update({ 
     "_id": data._id, 
     "itemTotal.amount": data.itemTotal.amount 
    }, { 
     "$set": { 
      "itemTotal.amount": parseFloat(data.itemTotal.amount) 
     } 
    }); 
}) 

У меня нет разрешения, чтобы сделать это. Итак, как я могу получить сумму за день?

ответ

2

Это невозможно в отношении MongoDB 3.4. Эта функция уже было предложено, но не была реализована еще:

Need a type conversion mechanism to convert between strings and numbers

Так что единственный способ решить проблему является вручную выполнить сумму totalAmount в JavaScript ...

+0

Спасибо очень много! – heramerom