2016-07-27 2 views
1

У меня есть существующий отчет с использованием структуры агрегации MongoDB, и я бы хотел добавить к нему новое поле - количество всех документов, где одно из числовых полей меньше заданного значения.Конвейер агрегации MongoDB: подсчет документов с полем меньше значения?

В моих документах есть поле длины, которое я уже вычисляю в среднем, поэтому в дополнение к этому я бы хотел, чтобы количество документов было меньше определенного числа.

Мой текущий трубопровод агрегация очень прост:

db.streams.aggregate([ 
 
    { $match: { track_id: "ecb96af4537d4263b83f5675dbcc0388" }}, 
 
    { $group: { _id: "$source", listens: { $sum: 1 } } } 
 
])

Я попытался с помощью $sum и $lt, но счетчик всегда равен 0. Я предполагаю, что это происходит потому, что $sum только считается, когда возвращается 1, но $lttrue. Это то, что я пробовал:

db.streams.aggregate([{ 
 
    $match: { 
 
    track_id: "ecb96af4537d4263b83f5675dadd0388" 
 
    } 
 
}, { 
 
    $group: { 
 
    _id: "$source", 
 
    listens: { 
 
     $sum: 1 
 
    }, 
 
    skips: { 
 
     $sum: { 
 
     $lt: ["$length", 1000] 
 
     } 
 
    } 
 
    } 
 
}, ])

Кто-нибудь знает, как я могу добиться этого? Спасибо!

ответ

0

Вы можете добавить вложенное состояние как так

... 
skips: { 
    $sum: { 
     $cond: { 
      if: { $lt: ["$length", 1000]}, 
      then: 1, 
      else: 0 
     } 
    } 
} 
... 
+0

Perfect, спасибо большим! –

Смежные вопросы