2016-12-13 3 views
5

मैं की तरह order दस्तावेज़ में कुछ डेटा है:mongodb sum string क्वेरी कैसे करें?

{ "_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

यह मोंगोडीबी 3.4 के रूप में संभव नहीं है। यह स्थान पहले से अनुरोध किया गया है, लेकिन अभी तक लागू नहीं किया गया:

Need a type conversion mechanism to convert between strings and numbers

तो केवल आपकी समस्या को मैन्युअल रूप से जावास्क्रिप्ट में totalAmount योग प्रदर्शन करने के लिए है हल करने के लिए जिस तरह से ...

+0

तुम बहुत धन्यवाद बहुत! – heramerom

संबंधित मुद्दे