2015-02-10 2 views
-1

Я пытаюсь создать некоторую ежедневную статистику из таблицы MongoDB. Документ содержит сообщения, которые имеют дату создания, состояние (предупреждение, ошибка, завершение). Я хотел бы обработать запрос, в результате которого будет отображаться одна запись за - Date, Count of Warn, Count of Error, Count of Complete. Я новичок в Mongo и изучаю язык запросов. Я попытался агрегацию со смешанными результатами:Совокупный запрос в MongoDB

db.TransactionLogs.aggregate(
{ $group : { 
     _id : { 
     category: {$substr:["$startDate",0,10]}, 
     term: "$Status", 
     }, 
     total: { $sum : 2 } 
    } 
}) 

приводит несколько записей на сегодняшний день по статусу:

"result" : [ 
     { 
      "_id" : { 
       "category" : "2015-02-10", 
       "term" : "Completed", 
      }, 
      "total" : 532 
     }, 
     { 
      "_id" : { 
       "category" : "2015-02-10", 
       "term" : "Error", 
      }, 
      "total" : 616 
     }, 

Сообщение:

{ "_id" : "2ceda481-3dd3-480d-800d-95288edce6f2", "MID" : "02de5194-7a1d-4854-922c-934902840136", "Status" : "Completed", "firstName" : "Willy", "lastName" : "Wire", "allocation" : "100", "initEvent" : "Marriage", "system" : "Oracle", "startDate" : "2015-02-06T19:03:34.237Z", "stopDate" : "2015-02-06T19:23:34.237Z", "plan" : "445-A" } 

Я уверен, что его отсутствие понимание агрегации с моей стороны. Любая помощь или руководство очень ценится!

Я понял. Мне нужно было посмотреть, как «поворот» в Монго. Это работает:

db.TransactionLogs.aggregate([ { $project: { startdate: {$substr:["$startDate",0,10]}, 
        cnt_e1: { $cond: [ { $eq: [ "$Status", "Error" ] }, "$count", 1 ] }, 
        cnt_e2: { $cond: [ { $eq: [ "$Status", "Warning" ] }, "$count", 1 ] }, 
        cnt_e3: { $cond: [ { $eq: [ "$Status", "Completed" ] }, "$count", 1 ] }, 
    } }, 
    { $group: { _id: "$startdate", cnt_e1: { $sum: "$cnt_e1" }, cnt_e2: { $sum: "$cnt_e2" }, cnt_e3: { $sum: "$cnt_e3" } } }, 
    { $sort: { _id: 1 } }, 
+2

Пожалуйста, вы можете показать нам свой документ? – styvane

+0

Было бы многократные записи с системой, датой, изменением initevent на событие. – pmclean1964

+0

Не добавляйте сюда свой документ. Измените свой вопрос, чтобы добавить его. – styvane

ответ

0

Вот код ...

db.TransactionLogs.aggregate([ { $project: { startdate: {$substr:["$startDate",0,10]}, 
        cnt_e1: { $cond: [ { $eq: [ "$Status", "Error" ] }, "$count", 1 ] }, 
        cnt_e2: { $cond: [ { $eq: [ "$Status", "Warning" ] }, "$count", 1 ] }, 
        cnt_e3: { $cond: [ { $eq: [ "$Status", "Completed" ] }, "$count", 1 ] }, 
    } }, 
    { $group: { _id: "$startdate", cnt_e1: { $sum: "$cnt_e1" }, cnt_e2: { $sum: "$cnt_e2" }, cnt_e3: { $sum: "$cnt_e3" } } }, 
    { $sort: { _id: 1 } },