2016-01-12 2 views
2

Я пытаюсь выполнить запрос в Mongodb. Запрос, который я хотел бы выполнить, - найти все заказы в коллекции на основе даты (7 дней), а затем добавить цены с вложенными объектами для каждого заказа. У меня есть следующий код до сих пор:Компонент Mongodb на основе прошлой даты

/сбор данных

{ 
    "_id" : "g32fYpydfSFDbFkoi", 
    "orderNumber" : 1234, 
    "createdAt" : ISODate("2016-01-12T13:50:17.559Z"), 
    "productsInOrder" : [ 
     { 
      "category" : "ambient", 
      "item" : 23982, 
      "desc" : "Ergonomic Cotton Sausages", 
      "quantity" : "456", 
      "price" : "0.54", 
      "lineprice" : "246.24", 
      "_id" : "BdD4QnM7sYTwBpLds" 
     }, 
     { 
      "category" : "ambient", 
      "item" : 15336, 
      "desc" : "Rustic Wooden Chicken", 
      "quantity" : "2", 
      "price" : "1.87", 
      "lineprice" : "3.74", 
      "_id" : "PvtSxi2MfYrZNTD6f" 
     }, 
     { 
      "category" : "chilled", 
      "item" : 57584, 
      "desc" : "Unbranded Soft Chicken", 
      "quantity" : "3", 
      "price" : "4.69", 
      "lineprice" : "14.07", 
      "_id" : "ppkECqmhPvg7pQcgB" 
     }, 
     { 
      "category" : "ambient", 
      "item" : 71168, 
      "desc" : "Rustic Rubber Computer", 
      "quantity" : "5", 
      "price" : "3.04", 
      "lineprice" : "15.20", 
      "_id" : "bZtr5dkvsG92YtLoe" 
     }, 
     { 
      "category" : "frozen", 
      "item" : 87431, 
      "desc" : "Unbranded Granite Sausages", 
      "quantity" : "5678", 
      "price" : "1.98", 
      "lineprice" : "11242.44", 
      "_id" : "ZKur3rHhtCLsWiENr" 
     }, 
     { 
      "category" : "frozen", 
      "item" : 75007, 
      "desc" : "Practical Frozen Towels", 
      "quantity" : "678", 
      "price" : "1.19", 
      "lineprice" : "806.82", 
      "_id" : "g78zvzoE8wJkciD9C" 
     }, 
     { 
      "category" : "frozen", 
      "item" : 84721, 
      "desc" : "Fantastic Metal Hat", 
      "quantity" : "34", 
      "price" : "1.83", 
      "lineprice" : "62.22", 
      "_id" : "4aqxBWhXy5cabbbiM" 
     }, 
     { 
      "category" : "frozen", 
      "item" : 72240, 
      "desc" : "Fantastic Granite Towels", 
      "quantity" : "1", 
      "price" : "2.94", 
      "lineprice" : "2.94", 
      "_id" : "MQD2LNv36mE3BWvZJ" 
     }, 
     { 
      "category" : "chilled", 
      "item" : 89448, 
      "desc" : "Intelligent Concrete Towels", 
      "quantity" : "6678", 
      "price" : "0.42", 
      "lineprice" : "2804.76", 
      "_id" : "AjRrxFT4mfpxuciC4" 
     }, 
     { 
      "category" : "chilled", 
      "item" : 57584, 
      "desc" : "Unbranded Soft Chicken", 
      "quantity" : "1111", 
      "price" : "4.69", 
      "lineprice" : "5210.59", 
      "_id" : "4yBspve6mBNNzqDnZ" 
     } 
    ] 
    } 

Запрос

Orders.aggregate([ 
    { $match: { 'createdAt': { $gt: pastDate }}}, 
    { $unwind: '$productsInOrder' }, 
    { 
     $group: { 
     _id: null, 
     price: { 
      $sum: '$productsInOrder.price' 
     } 
     } 
    } 
]); 

То, что я в конечном счете хочу, чтобы вывести общая цена за день за последние 7 дней. Может ли кто-нибудь помочь указать мне в правильном направлении? Спасибо заранее.

+0

Вы понимаете, что поле 'price' является строкой? – chridam

+1

@chridam no Я этого не делал! спасибо за указание, что вне – mtwallet

+0

@chridam Теперь я исправил эту проблему, я могу получить сумму всех цен, поэтому спасибо за указатель. Есть ли способ вывести общее количество за каждый из последних 7 дней отдельно или мне нужно будет запускать несколько запросов для каждого условия? – mtwallet

ответ

1

Во-первых, оператор $sum будет игнорировать без числовых значений и productsInOrder.price поддокумент поле строкового типа, так что было бы лучше, если преобразовать это в числовом поле.

Сделав это, чтобы вывести общую цену в день за последние 7 дней, изменить группу с помощью клавиши использовать оператор $dayOfMonth какие группы ваши документы в день в пределах этого диапазона 7 дней, как в следующем примере

Orders.aggregate([ 
    { "$match": { "createdAt": { "$gt": pastDate } } }, 
    { "$unwind": "$productsInOrder" }, 
    { 
     "$group": { 
      "_id": { 
       "day": { "$dayOfMonth": "$createdAt" } 
      }, 
      "price": { "$sum": "$productsInOrder.price" } 
     } 
    }  
]); 
Смежные вопросы