MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

рамка за агрегиране на mongodb - генериране на _id от функция

Както при MongoDB 2.4, не можете да внедрите персонализирани функции в Aggregation Framework. Ако искате да $group чрез едно или повече полета, трябва да ги добавите или чрез оператори и изрази за агрегиране, или чрез изричен update(), ако не искате да изчислявате всеки път.

С помощта на Aggregation Framework можете да добавите изчислена bucket поле в $project стъпка на конвейера с $cond оператор .

Ето пример за изчисляване на диапазони въз основа на numberField които след това могат да се използват в $group конвейер за sum/avg/etc:

db.data.aggregate(
    { $project: {
        numberfield: 1,
        someotherfield: 1,
        bucket: {
            $cond: [ {$and: [ {$gte: ["$numberfield", 1]}, {$lte: ["$numberfield", 20]} ] }, '1-20', {
            $cond: [ {$lt: ["$numberfield", 41]},  '21-40',  {
            $cond: [ {$lt: ["$numberfield", 61]},  '41-60',  {
            $cond: [ {$lt: ["$numberfield", 81]},  '61-80',  {
            $cond: [ {$lt: ["$numberfield", 101]}, '81-100', '100+' ]
            }]}]}]}]
        }
    }},
    { $group: {
        _id: "$bucket",
        sum: { $sum: "$someotherfield" }
    }}
)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. java - MongoDB + Solr изпълнения

  2. Meteor актуализира ли версията на mongodb автоматично?

  3. Как да рестартирам условно веригата обещания от началото?

  4. Статистики за база данни и колекция MongoDB

  5. PHP не може да намери драйвер за MongoDB