2015-11-24 3 views
-1

У меня есть следующие коллекции:как заполнить вспомогательный документ в mongodb?

{ 
    name: "c1", 
    jobs: [{ 
     category: "a" 
    }, { 
     category: "a" 
    },{ 
     category: "b" 
    }] 
} 
{ 
    name: "c2", 
    jobs: [{ 
     category: "b" 
    }, { 
     category: "c" 
    }] 
} 

и я хочу, чтобы получить следующий результат:

[{ 
    category: "a", 
    total: 2 
}, { 
    category: "b", 
    total: 2 
}, { 
    category: "c", 
    total: 1 
}] 

Как я могу это сделать с MongoDB запроса (или даже лучше с MongoDB C# водителя)?

ответ

0
db.getCollection('test').aggregate( 
    { $unwind: "$jobs" }, 
    { $group: 
     { _id: '$jobs.category', total : { '$sum' : 1 } } 
    } 
) 
1
db.test.aggregate( 
    { $unwind: "$jobs" }, 
    { $group: 
     { _id: '$jobs.category', total : { '$sum' : 1 } } 
    }, 
    { $project: { category : '$_id', _id:0, total:1 } }  
).toArray() 

Это дает именно тот результат, как и в вашем вопросе.

  1. Пять документов будет производит отвинтив массив
  2. категории Для каждой категории, сумма считается
  3. _id с шагом $ группа переименовывается в категории
  4. В результате множества преобразованы в массив
+0

Фантастический! оно работает. большое спасибо –

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