Считайте значение каждый день. Помогите мне, я новичок

#node.js #mongodb

#node.js #mongodb

Вопрос:

как мне запросить mongodb, чтобы быть таким .. спасибо

 {
    status: A
    date: 1/1
},
{
    status: A
    date: 1/1
}
{
    status: B
    date: 1/1
}
{
    status: B
    date: 2/1
}
{
    status: B
    date: 5/1
}
 

Результат:

  {
     date: 1/1,
     statusA: 2,
     statusB: 1
 }
  {
     date: 2/1,
     statusA: 0,
     statusB: 1
 }
  {
     date: 3/1,
     statusA: 0,
     statusB: 0
 }  {
     date: 4/1,
     statusA: 0,
     statusB: 0
 } 
 {
     date: 5/1,
     statusA: 0,
     statusB: 1
 }
 

Ответ №1:

Вы можете использовать $group

 db.collection.aggregate([
  {
    $group: {
      _id: "$date",
      statusA: {
        $sum: {
          $cond: [
            { $eq: [ "$status","A"] },
            1,
            0
          ]
        }
      },
      statusB: {
        $sum: {
          $cond: [
            { $eq: [ "$status", "B" ]},
            1,
            0
          ]
        }
      }
    }
  }
])
 

Рабочая игровая площадка Монго

Комментарии:

1. Ваш ответ хорош, но как мне получить его недостающие дни и нулевое значение.? спасибо

Ответ №2:

Вы можете использовать aggregate API pipline:

  1. group элемент by date при подсчете statusA / B с использованием $sum 1 или 0 в зависимости от $eq результата conditon
  2. Затем project результат для переименования _id date (как вы ожидали в своем примере)
 db.collection.aggregate()
  .group({
      _id: "$date",
      statusA: { $sum: 
          { $cond: [{ $eq: [ "$status", "A" ]}, 1, 0 ]}
      },
      statusB: { $sum: 
          { $cond: [{ $eq: [ "$status", "B" ]}, 1, 0 ]}
      }
  })
  .project({
      date: "$_id",
      statusA: 1,
      statusB: 1,
      _id: 0
    });
 

Комментарии:

1.Ваш ответ хорош, но как мне получить его недостающие дни и нулевое значение.? спасибо